Tokenizers

Тема дорожной карты · Elasticsearch

Токенизатор — это компонент анализатора Elasticsearch, который разбивает строку на отдельные термы (токены), после чего они сохраняются в инвертированном индексе или используются для сопоставления при запросах. Elasticsearch поставляется с разнообразными встроенными токенизаторами: standard (сегментация текста по Unicode, подходит для большинства западных языков), whitespace (разбивает только по пробелам, сохраняя пунктуацию), keyword (обрабатывает весь ввод как один токен — без разбивки), pattern (разбивает по настраиваемому регулярному выражению), edge_ngram (генерирует n-граммы, привязанные к началу каждого токена, — удобно для автодополнения) и uax_url_email (обрабатывает URL и email-адреса как единые токены). Каждый пользовательский анализатор в Elasticsearch настраивается ровно с одним токенизатором, который выбирается в зависимости от природы индексируемого контента и ожидаемого поведения поиска. Например, использование токенизатора edge_ngram с min_gram равным 1 и max_gram равным 15 для поля name позволяет реализовать автодополнение по префиксу без накладных расходов на prefix-запросы в Elasticsearch. Проверить, как токенизатор разбивает строку, можно с помощью GET /_analyze с параметром tokenizer — это незаменимо при разработке пользовательских конфигураций анализаторов для нового индекса Elasticsearch.

Как это работает

Tokenizers определяют типы полей + как они индексируются/анализируются. Dynamic mapping auto-detect-ит типы из первого документа — удобно, но опасно (строка "12345" становится long, потом ломается при реальной строке). Explicit mapping — то что вам нужно в prod. Типы полей: text (analysed, searchable, не aggregatable), keyword (exact, aggregatable, sortable), long/double, date, boolean, nested, geo_point. Analyzers обрабатывают текст: tokenize → filter (lowercase, stop words, stemming). Распространённые: standard, english, custom analyzers per язык.

Когда применять

Всегда explicit mapping в production — dynamic mapping делает один плохой doc отравлением индекса. Subfields: text поле с .keyword для search + aggregation. Analyzers per язык (russian analyzer для русского). Отключайте _source только с большой осторожностью — теряете возможность reindex.

Типичные ошибки

Ловушки Tokenizers: dynamic mapping (первый weird doc ломает schema); только text — нельзя aggregate, нельзя сортировать; неправильный analyzer (English на русском → нет stemming, плохие результаты); слишком много полей ("field explosion" — > 1000 полей упирается в лимиты).

Связанные понятия

Полезные ресурсы