Обычно у вас есть аналогичная цепочка анализа как по времени индекса, так и по времени запроса. Подобное не означает точно то же самое, но обычно то, как вы индексируете документы, отражает то, как вы их запрашиваете.
Пример 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, чтобы поиграть с различными анализаторами и различными результатами.
Могу ли я узнать, сделал ли мой ответ все более ясным для вас? – javanna
Ссылка на верхнюю часть сломана – Artem