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

я отформатировал свой запрос точно так же, как в исходном вопросе.