为什么queryString甚至不会给查询添加关键字分析字段提供任何结果

时间:2013-08-28 18:02:55

标签: lucene elasticsearch

我怀疑查询是如何搜索到文档的。

当我使用针对关键字分析字段的确切查询“什么是1234?”进行搜索时,我无法获得任何结果。 但如果我搜索“什么”对抗雪球/标准分析字段,那么我得到了一些结果,我还尝试了另一种方式将空间转移到查询中,如“ what \ is \ 1234?”强>“,它也给了一些结果。

默认情况下,query_string将使用什么分析器,是否会使用任何分析器转换用户查询,或者它将使用用户提供的内容?

请在此处找到我的要点:https://gist.github.com/kirubar/6369034

1 个答案:

答案 0 :(得分:1)

查询字符串“什么是1234?”无法找到结果的原因不是分析器,而是QueryParser。

query_string使用Lucene query syntax。查询解析器将该查询解释为三个单独的查询。也就是说

"query" : "what is 1234?"

是等于:

"query" : "what OR is OR 1234?"

如果你想执行一个短语查询,它需要用引号括起来,类似于(我相信你还需要将分析器设置为KeywordAnalyzer,所以短语不会被标记化,再次阻止匹配):

"analyzer" : "keyword",
"query" : "\"what is 1234?\""

或者,更好的是,甚至不使用query_string查询。相反,请使用term查询,尤其是在查询关键字字段时,例如:

"term" : { "message_keyword" : "what is 1234?" }