6

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

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

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

有谁知道发生了什么?

4

2 回答 2

11

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

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

让我知道答案是否足够清楚。

于 2012-09-07T09:39:19.860 回答
2

感谢@javanna 为我指明了正确的方向。我通过将_all字段的分析器设置为snowball. 有关详细信息,请参阅此文档

我正在使用 Ruby 轮胎 gem,并且能够在我的模型中指定映射,如下所示:

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

我的查询格式与原始问题完全相同。

于 2013-02-10T20:14:03.977 回答