Tokenizer против фильтров токенов
Я пытаюсь реализовать автозаполнение с помощью Elasticsearch, думая, что я понимаю, как это сделать...
Я пытаюсь создать предложения с несколькими словами (фразами), используя edge_n_grams ES при индексировании данных обхода.
в чем разница между tokenizer
и token_filter
- Я прочитал документы по этим, но все еще нуждаюсь в большем понимании по ним....
например, является ли token_filter тем, что ES использует для поиска по вводу пользователя? Это токенизатор, что ES использует для создания токенов? Что такое токен?
возможно ли для ES создавать предложения с несколькими словами, используя любую из этих вещей?
1 ответов
токенизатор разделит весь вход на токены, и фильтр токенов применит некоторое преобразование к каждому токену.
например, предположим, что вход The quick brown fox
. Если вы используете edgeNGram токенизатор, вы получите следующие лексемы:
T
Th
The
-
The
(Последний герой space) The q
The qu
The qui
The quic
The quick
-
The quick
(последний символ-пробел) The quick b
The quick br
The quick bro
The quick brow
The quick brown
-
The quick brown
(Последний герой space) The quick brown f
The quick brown fo
The 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 также поддерживает объяснять функцию который показывает детали во время каждого шага процесса анализа.