Подтвердить что ты не робот

Упругий поиск - поиск_анализатора против index_analyzer

Я смотрел http://euphonious-intuition.com/2012/08/more-complicated-mapping-in-elasticsearch/ который объясняет анализаторы ElasticSearch.

Я не понимал, что касается разных поисковых и индексных анализаторов. Второй пример пользовательского сопоставления выглядит следующим образом:
- > индексный анализатор - edgeNgram
- > анализатор поиска:

"full_name":{
    "filter":[
        "standard",
        "lowercase",
        "asciifolding"
    ],
    "type":"custom",
    "tokenizer":"standard"
}

если мы хотим, чтобы запрос "Race" не возвращал результаты, такие как * ra * pport и * rac * ial из-за edgeNgram, зачем сначала индексировать его с помощью edgeNgram?

Пожалуйста, объясните пример, где полезны различные анализаторы.

4b9b3361

Ответ 1

Обычно у вас есть аналогичная цепочка анализа как по времени индекса, так и по времени запроса. Подобное не означает точно то же самое, но обычно то, как вы индексируете документы, отражает то, как вы их запрашиваете.

Пример ngrams действительно хорош, хотя, поскольку это одна из основных причин, по которой вы использовали бы различные анализаторы в режиме индекса и времени запроса.

Для частичных совпадений вы указываете с краем ngrams, так что "elasticsearch" становится (с mingram 3 и maxgram 20):

"ela", "elas", "elast", "elasti", "эластичный" , "эластичный" , "эластичный" , "эластичный" , "elasticsear", "eleasticsearc" и "elasticsearch"

Теперь запросите созданное поле. Если мы запросим термин "эластичный" , получим совпадение, и мы вернем ожидаемый результат. Мы в основном сделали то, что мы назвали выше частичного соответствия точным совпадением, учитывая то, что мы проиндексировали. Там также не нужно применять ngrams к запросу. Если бы мы это сделали, мы запросили бы все следующие термины:

"ela", "elas", "elast", "elasti" и "elastic"

Это сделает запрос более сложным и приведет к появлению странных результатов. Скажем, вы указали термин "истек" в другом документе в том же поле. У вас будут следующие ngrams:

"ela", "elap", "elaps", "elapse", "elapsed"

Если вы ищете "эластичный" и задаете ngrams для запроса, термин "ela" также будет соответствовать этому второму документу, поэтому вы получите его вместе с первым документом, хотя никакие термины не содержат весь "эластичный" "срок, который вы искали.

Я бы посоветовал вам взглянуть на анализ api, чтобы поиграть с другим анализатором и их различными результатами.

Ответ 2

Ссылка официальная документация об индексах и анализаторах поиска:

Иногда имеет смысл использовать другой анализатор по индексу и время поиска. Например, во время индекса мы можем индексировать синонимы, например, для каждого случая быстрого мы также индексируем быстро, быстро и быстро. Но во время поиска нам не нужно искать все эти синонимы. Вместо этого мы можем просто взглянуть на одно слово: пользователь ввел, будь то быстрый, быстрый, быстрый или быстрый.

Чтобы включить это различие, Elasticsearch также поддерживает index_analyzer и параметры search_analyzer, а также анализаторы, названные default_index и default_search.

Учитывая эти дополнительные параметры, полная последовательность по индексу время действительно выглядит так:

  • index_analyzer, определенный в сопоставлении полей, else
  • анализатор, определенный в полевом отображении, else
  • анализатор, определенный в поле _анализатора документа, else
  • по умолчанию index_analyzer для типа, по умолчанию используется
  • анализатор по умолчанию для типа, по умолчанию
  • анализатор с именем default_index в настройках индекса, который по умолчанию имеет значение
  • анализатор с именем по умолчанию указан в настройках индекса, который по умолчанию имеет значение
  • анализатор с именем default_index на уровне node, который по умолчанию имеет значение
  • анализатор с именем по умолчанию на уровне node, который по умолчанию имеет значение
  • стандартный анализатор

И во время поиска:

  • анализатор, определенный в самом запросе, else
  • search_analyzer, определенный в сопоставлении полей, else
  • анализатор, определенный в полевом отображении, else
  • по умолчанию search_analyzer для типа, по умолчанию используется
  • анализатор по умолчанию для типа, по умолчанию
  • анализатор с именем default_search в настройках индекса, по умолчанию -
  • анализатор с именем по умолчанию указан в настройках индекса, который по умолчанию имеет значение
  • анализатор с именем default_search на уровне node, который по умолчанию имеет значение
  • анализатор с именем по умолчанию на уровне node, который по умолчанию имеет значение
  • стандартный анализатор