Elasticsearch с Snowball analyzer возвращает результаты только для stemmed word
Я использую анализатор снежного кома в поиске строки запроса ... вот так!--2-->
"query" : {
"query_string" : {
"query" : the-query-string-goes-here,
"default_operator" : "AND",
"analyzer" : "snowball"
}
}
это действительно работает, но делает что-то странное ... поиск " fighting "вернет результаты для" fight", но проигнорирует результаты для"fighting". Поиск " crews "вернет результаты для" crew", но не" crews", а также поиск" crew "также игнорирует результаты для" crews"...
кто-нибудь знает, что происходит?
2 ответов
Stemming имеет смысл, когда вы применяете его как во время индекса, так и во время запроса. Теперь вы применяете его во время запроса, так что вы ищете стебли слов, которые являются частью запроса.
Но я думаю, что индекс не содержит стеблей, так как вы не применяли стемминг во время индекса. Вы на самом деле ищете на _all
поле, так как вы не указали имя поля ни в своем запросе, ни с помощью default_field
(или fields
) атрибут, поддерживаемый query_string. The
спасибо @javanna за указание мне в правильном направлении. Я решил это, установив анализатор для до snowball
. См.этот документ для сведения.
Я использую Ruby tire gem, и мне удалось указать отображение в моей модели следующим образом:
mapping(_all: { analyzer: 'snowball' }) do
indexes :id, type: 'integer'
indexes :description
indexes :name, boost: 10
end
я отформатировал свой запрос точно так же, как в исходном вопросе.