Когда создается цепочка анализа для Edge N Gram в Elasticsearch

Я пытался выяснить, что лучше для добавочного поиска - грамматика края или подсказка завершения. До сих пор то, что я читал в Интернете, предполагало, что для подсказки завершения обработка данных выполняется во время создания индекса, тогда как для ребра n gram это делается во время запроса, следовательно, это медленнее, чем подсказка завершения. Однако только что в книге Elasticsearch - The definitve guide я прочитал, что для edge n gram это также делается во время индексации. Теперь я действительно сбит с толку, может ли кто-нибудь прояснить, как внутренне работает edge n gram.

Спасибо


person IFlyHigh    schedule 03.10.2017    source источник


Ответы (1)


Оба действуют во время индексации, создавая выделенные структуры данных:

  • Токенизатор N gram генерирует токены: "hello world" становится "h", "he", "hel"... "world", "world". Используется обычный "текстовый" (он же "строковый") тип отображения.
  • подсказчик завершения создает график: см. https://www.elastic.co/blog/you-complete-me . На данный момент существует специальный тип сопоставления «завершение».

Во время поиска подсказки обходятся дешевле:

  • N gram tokenizer:
    • typed text must be analyzed, resulting terms searched: searched "Hello Wor" should be analyzed into "hello"+"wor" and these 2 terms searched.
    • Тем не менее, токенизатор N gram должен быть удален из анализа (используйте другой анализатор между поиском и индексированием): поиск «Генри» будет проанализирован «h», «he», «hen», «henr»... и вернет «привет», потому что у них один и тот же префикс «он».
  • предложение завершения проще и быстрее. Если вы пытаетесь выполнить автозаполнение поиска по мере того, как пользователь вводит текст на клавиатуре, важна производительность.

В обоих случаях вы можете использовать собственные цепочки анализа (французский, немецкий, soundex...):

  • N grams:
    • Write time: custom analysis + edge ngram + type "text"
    • Время чтения: пользовательский анализ + усечение + API поиска
  • Completion
    • Write time: custom analysis + type "completion"
    • Время чтения: пользовательский анализ + предложение API
person G Quintana    schedule 03.10.2017
comment
привет, не могли бы вы разработать токенизатор N gram: набранный текст должен быть проанализирован, полученные термины будут найдены. Тем не менее, токенизатор N gram следует удалить (используйте другой анализатор между поиском и индексированием). - person IFlyHigh; 03.10.2017
comment
Если текст анализируется, чем существующий график будет полезен, верно? например, если я использую фонетический анализатор, тогда ifone также найдет iphone, но у меня не будет этого в моих уже сгенерированных токенах. - person IFlyHigh; 03.10.2017