Я новичок в этой области, и мне интересно, что такое современное состояние и где я могу прочитать об этом.
Предположим, что у меня есть только хранилище ключей/значений, и я каким-то образом определил (key1, key2) (не уверен, что он должен быть метрикой, т.е. если всегда должно выполняться неравенство треугольника).
То, что я хочу, это в основном функция поиска (ключа), которая возвращает мне все элементы с ключами до определенного расстояния до ключа поиска. Возможно, это ограничение расстояния настраивается. Может быть, это тоже ленивый итератор. Возможно, также может быть предел количества, а элемент (ключ, значение) с некоторой вероятностью P в возвращаемом наборе, где P = 1/расстояние (ключ, ключ поиска) или так (то есть идеальное совпадение, безусловно, будет в наборе и близких совпадениях, по крайней мере, с высокой вероятностью).
Одним примером приложения является сопоставление отпечатков пальцев в MusicBrainz. Они используют отпечаток AcoustId и определили эту функцию сравнения. Они используют индекс GG PostgreSQL, и я предполагаю (хотя я еще не полностью понял/прочитал код acoustid-server) GIN Partial Match Algorithm, но Я не совсем понимаю, о чем я просил и как он работает.
Для текста я нашел до сих пор использование фонетического алгоритма для упрощения слов, основанных на их произношении. Пример здесь. Это в основном для того, чтобы разбить пространство поиска на меньшее пространство. Однако это имеет несколько ограничений, например. он все равно должен быть идеальным сочетанием в меньшем пространстве.
Но в любом случае, я также ищу более общее решение, если оно существует.