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 также поддерживает объяснять функцию который показывает детали во время каждого шага процесса анализа.