1

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

当我针对关键字分析字段使用精确查询“什么是 1234? ”进行搜索时,我无法得到任何结果。但是,如果我针对雪球/标准分析字段搜索“ what ”,那么我得到了一些结果,并且我还尝试了另一种方法将空格转入查询,例如“ what\ is\ 1234? ”,它也给出了一些结果。

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

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

4

1 回答 1

1

查询字符串“ what is 1234? ”找不到结果的原因不是Analyzer,而是QueryParser。

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

"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?" }
于 2013-08-28T21:17:58.860 回答