индексирование по расстоянию
От | Dmitry E. Oboukhov |
---|---|
Тема | индексирование по расстоянию |
Дата | |
Msg-id | 20140509204252.GM15103@vdsl.uvw.ru обсуждение исходный текст |
Список | pgsql-ru-general |
объявлен свой тип данных 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
Вложения
В списке pgsql-ru-general по дате отправления: