带有雪球分析器的Elasticsearch仅返回词干的结果

时间:2012-09-07 08:53:48

标签: elasticsearch

我在查询字符串搜索中使用雪球分析器...就像这样

   "query" : {
      "query_string" : {
        "query" : the-query-string-goes-here,
        "default_operator" : "AND",
        "analyzer" : "snowball"
      }
    }

这实际上有效,但它做了一些奇怪的事情......寻找“战斗”将返回“战斗”的结果,但忽略“战斗”的结果。搜索“船员”将返回“船员”但不是“船员”的结果,搜索“船员”也会忽略“船员”的结果......

任何人都知道发生了什么事?

2 个答案:

答案 0 :(得分:11)

在索引时和查询时应用它时,词干是有意义的。现在,您在查询时应用它,以便搜索作为查询一部分的单词的词干。 但我想索引不包含词干,因为你没有在索引时应用词干。您实际上是在_all字段上搜索,因为您既未在查询中指定任何字段名称,也未使用query_string支持的default_field(或fields)属性。默认情况下,使用_all分析StandardAnalyzer字段。

有不同的方法可以解决这个问题。我个人会决定您要在查询中搜索的一组字段,并将其应用于映射中的字段。之后,您不需要在查询中指定分析器,因为将使用您要搜索的字段的已配置分析器。

如果答案足够清楚,请告诉我。

答案 1 :(得分:2)

感谢@javanna指出我正确的方向。我通过将_all字段的分析器设置为snowball来解决此问题。有关详细信息,请参阅this doc

我正在使用Ruby轮胎宝石,我能够在我的模型中指定映射如下:

mapping(_all: { analyzer: 'snowball' }) do
  indexes :id, type: 'integer'
  indexes :description
  indexes :name, boost: 10
end

我的查询格式与原始问题完全一样。