объявлен свой тип данных
mytype(a,b,c) (a,b,c - текстовые и числовые переменные)
Далее есть таблица
id, mytype, col1, col2, итп
Далее
От пользователя приходит объект mytype. Надо выбрать все объекты по
некоторым критериям подходящие наиболее близко к объекту mytype.
Для этого реализовали алгоритм, который возвращает число с плавающей
точкой на два объекта mytype.
это число характеризует "близость" двух объектов
чем меньше число - тем "ближе" объекты друг к другу.
Сунули этот алгоритм в функцию
DOUBLE my_dist(mytype, mytype)
Далее можно объявить оператор дистанции между двумя типами <->
Ну и далее можно написать запрос
SELECT
*
FROM
table t
ORDER BY
users_input::mytype <-> t.mytype
Вот с этого места постгрис стал отвечать на вопрос "дай мне n объектов
ближайших к тому что задал юзер"
Теперь хочу заставить постгрис это дело как-то индексировать.
сходу ничего подходящего не нашел.
Сейчас залез копаться в GIST-индексы и расширения на C, но возник
вопрос, может быть уже что-то готовое есть на тему решения подобных
задач?
то есть если у нас есть функция возвращающая дистанцию между двумя
объектами, то может быть можно просто (без C-программирования)
построить индекс отвечающий на
вопрос "дай мне ближайшие объекты к заданному"?
база данных по факту планируется практически ro (редко меняющийся
справочник), объема большого (несколько млн записей), поэтому
индексирование необходимо
--
. ''`. Dmitry E. Oboukhov
: :’ : email: unera@debian.org jabber://UNera@uvw.ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537