Вид полнотекстового поиска с Левентштейном - PullRequest
0 голосов
/ 28 октября 2018

Допустим, у вас есть таблица movies со следующими полями VARCHAR или TEXT:

  • title
  • description
  • author

Я хочу написать запрос в postgresql, чтобы сопоставить текст в любом из этих трех полей.Но в идеале я хочу сделать этот поиск очень размытым способом.Например:

  • Я бы хотел, чтобы Tron совпадал с Tron title
  • Я бы хотел, чтобы tron совпадал с tron title
  • Я хотел бы, чтобы The Tron соответствовал Tron заголовку
  • Я хотел бы Steven Lisberger соответствовал Lisberger, Steven автору
  • Я хотел бы commuter haker, чтобы соответствовать описанию, содержащему computer hacker.
  • Я бы набрал Tron Sci-Fi, чтобы сопоставить заголовок Tron с описанием Sci-Fi movie.

Так что, по сути, я рассчитываю нахотя бы некоторые из следующих функций:

  • Без учета регистра
  • Возможность игнорировать определенные слова
  • Игнорировать порядок слов
  • Использовать некоторый алгоритм расстояния между словами,например, Левенштейн
  • Объединяйте несколько полей при поиске

Я знаю, что это похоже на полнотекстовый поиск postgresql с использованием некоторой интеграции ispell вместо Левенштейнаалгоритм.Но он использует семантический вектор, зависящий от локали текста, что в каком-то смысле является антифункцией в моем случае.Мои записи фильмов могут быть написаны на любом языке, и у меня нет возможности различать их.Кроме того, у меня нет доступа к конфигурации сервера postgresql для добавления недостающих словарей.

Итак, я думаю, что я хотел бы иметь что-то вроде полнотекстового поиска, но вместо этого использовать какой-товектор-бабочка, составленный из различных рангов Левенштейна шаблонных слов с любым словом в тексте, чтобы соответствовать.

Я знаю, что это было бы супер неэффективно и по этой причине, конечно, его не существует.Но я хотел бы получить некоторую информацию, чтобы подумать о какой-то альтернативе или лучшем подходе.

Кроме того, я не хочу использовать Elasticsearch для этого.Я могу скомпрометировать функции, чтобы упростить стек приложений.Тем не менее, мне действительно интересно, просто из любопытства, узнать, возможно ли с ним что-то сделать (никогда не использовал его раньше).

...