2013-04-10 2 views
34

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

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

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

если мы хотели запрос «Race», чтобы не возвращать результаты как * ra * pport и * rac * ial из-за краяNgram, поэтому укажите это с краемNgram в первую очередь?

Просьба пояснить пример использования различных анализаторов.

+1

Могу ли я узнать, сделал ли мой ответ все более ясным для вас? – javanna

+0

Ссылка на верхнюю часть сломана – Artem

ответ

73

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

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

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

"ELA", "ELAS", "ELAST", "Elasti", "упругой «эластичные», «эластичные», «эластичные», «эластичные», «eleasticsearc» и «elasticsearch»

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

«ELA», «Elas», «ELAST», «Elasti» и «эластичный»

Это было бы сделать так, как запрос более сложным и приведет чтобы получить странные результаты. Допустим, вы указали термин «истек» в другом документе в том же поле. Вы бы следующие ngrams:

«ELA», «Elap», «elaps», «протечь», «прошедшее»

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

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

+1

Спасибо, ответ прояснил ситуацию :) –

+1

[This] (https://github.com/polyfractal/elasticsearch-inquisitor) Плагин elasticsearch помогает увидеть, как работают различные анализаторы. – gsk

+0

@gsk Спасибо большое, очень большое спасибо за упоминание выше плагина, и это очень полезно, чтобы увидеть, как мои данные индексируются внутри elasticsearch. –

7

Для ссылки the official documentation about index vs search analyzers:

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

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

С учетом этих дополнительных параметров в расчет, полная последовательность в индексе время действительно выглядит следующим образом:

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

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

  • анализатор, определенный в самом запросе, остальное
  • в search_analyzer, определенном в отображении поля, остальное
  • анализатора, определенных в отображении поля, остального
  • search_analyzer по умолчанию для типа, который по умолчанию к
  • анализатора по умолчанию для типа, который по умолчанию
  • анализатор имени в Отправить пароль настройки индекса, который по умолчанию
  • Analyz эр имя по умолчанию в настройках индекса, который по умолчанию
  • анализатора имени Отправить пароль на уровне узла, который по умолчанию
  • анализатора с именем по умолчанию на уровне узла, который по умолчанию
  • стандартного анализатор