---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.3
alternate:
  - https://ydb-platform--ydb.viewer.diplodoc.com/en/concepts/query_execution/fulltext_search.md
  - https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/query_execution/fulltext_search.md
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/query_execution/fulltext_search.md
    type: text/markdown
    title: Markdown version
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/concepts/query_execution/fulltext_search.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt

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

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

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

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

Ключевая идея полнотекстового индекса — **[инвертированный индекс](https://ru.wikipedia.org/wiki/Инвертированный_индекс)**: для каждого терма хранится список документов (первичных ключей), в которых этот терм встречается. Поэтому запросы вида "найти документы, где встречаются слова A и B" можно выполнять без полного сканирования таблицы.

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

* **без индекса** — сканированием таблицы и применением строковых предикатов (например, `LIKE`). Подход прост, но плохо масштабируется: объём работы растёт вместе с размером таблицы.
* **с полнотекстовым индексом** — созданием [полнотекстового индекса](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/fulltext-indexes.md) и выполнением запросов через `VIEW IndexName`. Этот подход предназначен для масштабируемого поиска.

## Полнотекстовый поиск с полнотекстовым индексом {#fulltext-search-index}

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

* выполнять полнотекстовое сопоставление через функцию [FulltextMatch](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/builtins/fulltext.md#fulltext-match);
* ранжировать результаты по релевантности через функцию [FulltextScore](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/builtins/fulltext.md#fulltext-score).

Поведение поиска (что считается термом, как обрабатываются регистр/формы слов, поддержка подстановок) задаётся при создании индекса через токенизатор и фильтры (например, lowercase, Snowball-стемминг, N-граммы). Подробности — в документации создания индекса [Полнотекстовый индекс](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/syntax/create_table/fulltext_index.md).

Подробнее:

* [Полнотекстовые индексы](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/fulltext-indexes.md)
* [Базовые функции полнотекстового поиска](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/builtins/fulltext.md)
* [VIEW (Полнотекстовый индекс)](https://ydb-platform--ydb.viewer.diplodoc.com/ru/yql/reference/syntax/select/fulltext_index.md)
