У мене є велика база даних (16М рядків), що містить перцептивні хеші зображень.
Я хотів би мати можливість шукати рядки, забиваючи відстань у розумні часові рамки.
Наразі, наскільки я правильно розумію проблему, я вважаю, що найкращим варіантом тут була б спеціальна реалізація SP-GiST, яка реалізує BK-дерево , але це, здається, багато роботи, і я все ще нечіткий на практичному подробиці правильної реалізації спеціального індексу. Розрахунок відстані Хеммінга є слухняною досить, і я зробити знаю , C, хоча.
В основному, що тут є відповідним підходом? Мені потрібно мати можливість запитувати відповідність на певній відстані редагування хеша. Як я розумію, відстань Левенштейна з рядками однакової довжини є функціонально перешкодою, тому існує хоча б якась підтримка того, чого я хочу, хоча чіткого способу створити з нього індекс немає (пам’ятайте, значення, за яким я запитую Я не можу попередньо обчислити відстань від фіксованого значення, оскільки це було б корисно лише для цього одного значення).
Зараз хеші зберігаються як 64-знакова рядок, що містить двійкове ASCII-кодування хеша (наприклад, "10010101 ..."), але я можу їх легко перетворити в int64. Справжнє питання полягає в тому, що мені потрібно мати можливість запитувати порівняно швидко.
Здається, що можна досягти чогось із того, що я хочу з pg_trgm
, але мені трохи не зрозуміло, як працює механізм відповідності триграму (зокрема, що насправді представляє показник подібності, який він повертає ?) на кшталт редагування-відстань).
Ефективність вставки не є критичною (обчислити хеші для кожного ряду дуже дорого), тому я в першу чергу дбаю про пошук.