From: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | индексирование по расстоянию |
Date: | 2014-05-09 20:42:52 |
Message-ID: | 20140509204252.GM15103@vdsl.uvw.ru |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | 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(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
From | Date | Subject | |
---|---|---|---|
Next Message | Sergey Konoplev | 2014-05-09 21:02:19 | Re: [pgsql-ru-general] индексирование по расстоянию |
Previous Message | Dmitry E. Oboukhov | 2014-05-09 20:22:19 | Отладка расширений Pg (C) |