我在查询字符串搜索中使用雪球分析器...就像这样
"query" : {
"query_string" : {
"query" : the-query-string-goes-here,
"default_operator" : "AND",
"analyzer" : "snowball"
}
}
这实际上有效,但它做了一些奇怪的事情......寻找“战斗”将返回“战斗”的结果,但忽略“战斗”的结果。搜索“船员”将返回“船员”但不是“船员”的结果,搜索“船员”也会忽略“船员”的结果......
任何人都知道发生了什么事?
答案 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
我的查询格式与原始问题完全一样。