Полнотекстовый поиск

Понятие полнотекстового поиска

Полнотекстовый поиск — это способ находить документы по текстовому содержимому в колонке типа String или Utf8 по словам, фразам и (при специальной индексации) по подстрокам. В отличие от простых строковых предикатов, полнотекстовый поиск обычно включает этапы токенизации и нормализации текста (например, приведение к нижнему регистру), что позволяет искать по "термам", а не по байтовым подстрокам. Типичные сценарии:

  • поиск по каталогам и базам знаний;
  • поиск по логам/сообщениям;
  • поиск по описаниям и метаданным.

Ключевая идея полнотекстового индекса — инвертированный индекс: для каждого терма хранится список документов (первичных ключей), в которых этот терм встречается. Поэтому запросы вида "найти документы, где встречаются слова A и B" можно выполнять без полного сканирования таблицы.

В YDB полнотекстовый поиск можно выполнять двумя основными способами:

  • без индекса — сканированием таблицы и применением строковых предикатов (например, LIKE). Подход прост, но плохо масштабируется: объём работы растёт вместе с размером таблицы.
  • с полнотекстовым индексом — созданием полнотекстового индекса и выполнением запросов через VIEW IndexName. Этот подход предназначен для масштабируемого поиска.

Полнотекстовый поиск с полнотекстовым индексом

Полнотекстовые индексы строят инвертированный индекс по текстовой колонке и позволяют:

  • выполнять полнотекстовое сопоставление через функцию FulltextMatch;
  • ранжировать результаты по релевантности через функцию FulltextScore.

Поведение поиска (что считается термом, как обрабатываются регистр/формы слов, поддержка подстановок) задаётся при создании индекса через токенизатор и фильтры (например, lowercase, Snowball-стемминг, N-граммы). Подробности — в документации создания индекса Полнотекстовый индекс.

Подробнее:

Предыдущая
Следующая