индексирование по расстоянию - Mailing list pgsql-ru-general

From Dmitry E. Oboukhov
Subject индексирование по расстоянию
Date
Msg-id 20140509204252.GM15103@vdsl.uvw.ru
Whole thread Raw
List 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

Attachment

pgsql-ru-general by date:

Previous
From: "Dmitry E. Oboukhov"
Date:
Subject: Отладка расширений Pg (C)
Next
From: Sergey Konoplev
Date:
Subject: Re: [pgsql-ru-general] индексирование по расстоянию