Позвольте мне объяснить мою проблему. У меня есть таблица с этой формой:
+----+------+-----------+-----------+
| ID | A | B | W |
+----+------+-----------+-----------+
| 1 | 534 | [a,b,c] | [4,6,2] |
| 2 | 534 | [a,b,d,e] | [6,3,6,2] |
| … | … | … | … |
| 54 | 667 | [a,b,r,e] | [4,6,2,3] |
| 55 | 8789 | [d] | [9] |
| 56 | 8789 | [a,b,d] | [7,2,3] |
| 57 | 8789 | [d,e,f,g] | [4,2,2,8] |
| … | … | … | … |
+----+------+-----------+-----------+
Запрос, который мне нужно выполнить, следующий: дан ввод со значениями A, B и W (например, A = 8789; B = [a, b ]; W = [3,2]) Мне нужно найти «ближайшую» строку в таблице, которая имеет такое же значение на A.
Я уже определил свою пользовательскую функцию расстояния. Наивный подход был бы что-то вроде (учитывая входные данные в примере):
SELECT * from my_table T, dist_function(T.B,T.W,ARRAY[a,b],ARRAY[3,2]) as dist
WHERE T.A = 8789
ORDER BY dist ASC
LIMIT 7
В моем понимании это классическая проблема KNN, для которой я понял, что что-то уже существует:
Я просто не уверен, какой показатель лучше всего рассмотреть. Спасибо.