В каких случаях работает/не работает prefix_length?


#1

Префиксный поиск, через запрос match работает весьма странно (анализатор - Edge NGramm). Например, мне нужно найти слово "москва" по введенному пользователем фрагменту "мос". Но в результатах я вижу (условно):
"москва"
"молотов"
"мурманск"

Почему это происходит - я понимаю. По explain хорошо видно, что он сначала делает проверку на префикс "м", получает score по трем указанным словам, потом "мо" и получает более высокий score по двум городам, и потом "мос" - и получает самую высокую оценку для "москва".

А как сделать, чтобы в принципе анализатор "выбрасывал" из выборки "молотов" и "мурманск"?

У меня первая мысль - поставить prefix_length: 3 для моего примера, что отсечет два лишних города. Но.... не сработало.

Какие есть оганичения по применение prefix_length? Как можно сделать, чтобы префиксный поиск мог искать "начиная с длины X"? Указывать при настройке edge ngramm минимальную длину префикса "3" - не подходит.


(Igor Motov) #2

А вы EdgeNGram и при поиске и при индексировании применяете? Вы не могли бы прислать полный пример того, что вы делаете?


#3

Да. использую тот же анализатор. Удалось воспроизвести эффект в отдельном тесте. Только не могу понять - как выкладывать, поэтому вот ссылка:

https://dl.dropboxusercontent.com/u/173410/test1.sh


(Igor Motov) #4

При поиске edgeNGram не нужен - иначе вы ищете по каждому префиксу запроса. То есть, если исправить ваш тест, то будет как-то так: https://gist.github.com/imotov/3ba124fdd4b0db5d0219 (Я только не уверен по поводу целесообразности использования word_delimeter, я бы использовал стандартный токенизатор и nGram поставил бы как фильтр)


#5

Вау! А я всю голову свихнул. :slight_smile: Спасибо огромное. Не додумался я до варианта изменить анализатор. :frowning:


(system) #6