为什么queryString即使在查询中添加了关键字分析字段也不会给出任何结果



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

当我用精确的查询"什么是1234?"对关键字分析字段进行搜索时,我没有得到任何结果。但是,如果我对照雪球/标准分析字段搜索"what",我得到了一些结果,我还尝试了另一种方法将空间转义到查询中,比如"what\is\1234?,它也给出了一些结果。

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

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

查询字符串"什么是1234?"找不到结果的原因不是分析器,而是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?" }

最新更新