Полнотекстовый поиск
Понятие полнотекстового поиска
Полнотекстовый поиск — это способ находить документы по текстовому содержимому в колонке типа String или Utf8 по словам, фразам и (при специальной индексации) по подстрокам. В отличие от простых строковых предикатов, полнотекстовый поиск обычно включает этапы токенизации и нормализации текста (например, приведение к нижнему регистру), что позволяет искать по "термам", а не по байтовым подстрокам. Типичные сценарии:
- поиск по каталогам и базам знаний;
- поиск по логам/сообщениям;
- поиск по описаниям и метаданным.
Ключевая идея полнотекстового индекса — инвертированный индекс: для каждого терма хранится список документов (первичных ключей), в которых этот терм встречается. Поэтому запросы вида "найти документы, где встречаются слова A и B" можно выполнять без полного сканирования таблицы.
В YDB полнотекстовый поиск можно выполнять двумя основными способами:
- без индекса — сканированием таблицы и применением строковых предикатов (например,
LIKE). Подход прост, но плохо масштабируется: объём работы растёт вместе с размером таблицы. - с полнотекстовым индексом — созданием полнотекстового индекса и выполнением запросов через
VIEW IndexName. Этот подход предназначен для масштабируемого поиска.
Полнотекстовый поиск с полнотекстовым индексом
Полнотекстовые индексы строят инвертированный индекс по текстовой колонке и позволяют:
- выполнять полнотекстовое сопоставление через функцию FulltextMatch;
- ранжировать результаты по релевантности через функцию FulltextScore.
Поведение поиска (что считается термом, как обрабатываются регистр/формы слов, поддержка подстановок) задаётся при создании индекса через токенизатор и фильтры (например, lowercase, Snowball-стемминг, N-граммы). Подробности — в документации создания индекса Полнотекстовый индекс.
Подробнее: