Префиксный поиск, через запрос match работает весьма странно (анализатор - Edge NGramm). Например, мне нужно найти слово "москва" по введенному пользователем фрагменту "мос". Но в результатах я вижу (условно):
"москва"
"молотов"
"мурманск"
Почему это происходит - я понимаю. По explain хорошо видно, что он сначала делает проверку на префикс "м", получает score по трем указанным словам, потом "мо" и получает более высокий score по двум городам, и потом "мос" - и получает самую высокую оценку для "москва".
А как сделать, чтобы в принципе анализатор "выбрасывал" из выборки "молотов" и "мурманск"?
У меня первая мысль - поставить prefix_length: 3 для моего примера, что отсечет два лишних города. Но.... не сработало.
Какие есть оганичения по применение prefix_length? Как можно сделать, чтобы префиксный поиск мог искать "начиная с длины X"? Указывать при настройке edge ngramm минимальную длину префикса "3" - не подходит.
При поиске edgeNGram не нужен - иначе вы ищете по каждому префиксу запроса. То есть, если исправить ваш тест, то будет как-то так: https://gist.github.com/imotov/3ba124fdd4b0db5d0219 (Я только не уверен по поводу целесообразности использования word_delimeter, я бы использовал стандартный токенизатор и nGram поставил бы как фильтр)
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.