我怀疑查询是如何搜索到文档的。
当我使用针对关键字分析字段的确切查询“什么是1234?”进行搜索时,我无法获得任何结果。 但如果我搜索“什么”对抗雪球/标准分析字段,那么我得到了一些结果,我还尝试了另一种方式将空间转移到查询中,如“ what \ is \ 1234?”强>“,它也给了一些结果。
默认情况下,query_string将使用什么分析器,是否会使用任何分析器转换用户查询,或者它将使用用户提供的内容?
请在此处找到我的要点:https://gist.github.com/kirubar/6369034
答案 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?" }