лежат массивы из N чисел: выхлоп из машинки. Хочу уметь поискать по колонке ближайших к заданному массиву соседей в смысле эвклидовой метрики. Хотел было построить kd-дерево с помощью spgist, но пока не осилил. Либо ругается, что нет operator class для double precision[], либо, если указать например kd_point_ops в качестве класса операторов, ругается, что класс операторов не подходит к double precision[]. Как сделать правильно? Вроде бы максимально типовая задача.
PostgreSQL 12.6 если что.
А как вы вводите евклидовую метрику на прострнастве неопределённой размерности?
У меня все длины одинаковые. Может мне нужен какой-то другой тип, чтобы это подчеркнуть?
Ага, сначала написать свой тип, потом по образу amprocfamily='spgist/kd_point_ops' написать для них функцыи.
Звучит слишком сложно для такой слишком простой задачи. Наверняка есть готовое решение, про которое я не знаю.
не знаю что вы хотите, но в пг есть knn https://postgrespro.ru/docs/enterprise/13/k-nn-search
Вот я хочу именно как там написано, но в 1000-мерном пространстве, а не для point.
Knn в Энтерпрайз версии postgres. А метрику вам в любом случае описать нужно, вы же свое пространство в point никак не свернете
а откуда информация про энтерпрайз? да и там не только point можно использовать.
Так прямо по вашей ссылке написано. В документации по стандартной версии и в ванильной этого пункта не нашел
Обсуждают сегодня