Tokenizer против фильтров токенов
Я пытаюсь реализовать автозаполнение с помощью Elasticsearch, думая, что я понимаю, как это сделать...
Я пытаюсь создать предложения с несколькими словами (фразами), используя edge_n_grams ES при индексировании данных обхода.
в чем разница между tokenizer и token_filter - Я прочитал документы по этим, но все еще нуждаюсь в большем понимании по ним....
например, является ли token_filter тем, что ES использует для поиска по вводу пользователя? Это токенизатор, что ES использует для создания токенов? Что такое токен?
возможно ли для ES создавать предложения с несколькими словами, используя любую из этих вещей?
1 ответов
токенизатор разделит весь вход на токены, и фильтр токенов применит некоторое преобразование к каждому токену.
например, предположим, что вход The quick brown fox. Если вы используете edgeNGram токенизатор, вы получите следующие лексемы:
TThThe-
The(Последний герой space) The qThe quThe quiThe quicThe quick-
The quick(последний символ-пробел) The quick bThe quick brThe quick broThe quick browThe quick brown-
The quick brown(Последний герой space) The quick brown fThe quick brown foThe quick brown fox
однако, если вы используете стандартный токенизатор, который разделит вход на слова / токены, а затем edgeNGram token filter, вы получите следующие лексемы
-
T,Th,The -
q,qu,qui,quic,quick -
b,br,bro,brow,brown -
f,fo,fox
как вы можете видеть, выбор между edgeNgram токенизатор или token filter зависит от того, как вы хотите нарезать текст и как вы хотите его искать.
я предлагаю взглянуть на отличный elyzer инструмент, который обеспечивает способ визуализации процесса анализа и увидеть, что производится на каждом шаге (токенизация и токен фильтрующий.)
по состоянию на ES 2.2,_analyze endpoint также поддерживает объяснять функцию который показывает детали во время каждого шага процесса анализа.