Elasticsearch字符串查询匹配一个字段的多个术语

时间:2016-01-12 04:29:31

标签: java elasticsearch

我正在编写一个查询字符串以匹配一个字段中的多个字符串。

我需要匹配类型为server_physical的文档,并且有一个名为string的{​​{1}}字段,其中包含cpuE5和{{1}等字词}}。

这是我得到的,它将完全返回我需要的文件:

2620

但它并不好,因为它也会匹配包含这些词的其他字段。当我向查询添加v3字段时,没有匹配的文档。像这样:

"_type:server_physical AND *2620* AND *E5* AND *v3*"

或者这个:

cpu

查询字符串的正确方法是什么?我找不到关于"_type:server_physical AND cpu:*2620* AND cpu:*E5* AND cpu:*v3*" 的任何其他文档,除了弹性搜索官方指南中的非常短的文档,其中有几个句子。

此字段的映射是:

"_type:server_physical AND CPU:(*2620* AND *E5* AND *v3*)"

1 个答案:

答案 0 :(得分:1)

您的查询没问题。两者都应该有效:

beforeSave

诀窍在于其中一个string query参数"_type:server_physical AND cpu:*2620* AND cpu:*E5* AND cpu:*v3*" "_type:server_physical AND cpu:(*2620* AND *E5* AND *v3*)" 。它默认为lowercase_expanded_terms并缩小所有属于通配符的字符,即true变为E5。尝试将其设置为false,并且所有都应该有效:

e5

奖金编辑:为什么没有POST index/_search { "query": { "query_string": { "query": "_type:server_physical AND cpu:(*2620* AND *E5* AND *v3*)", "lowercase_expanded_terms": false } } } 会有效?因为默认情况下cpu:会在query string字段上进行搜索(除非您禁用它),这是文档中所有字段的串联。然后进行分析,如果没有指定分析器,将使用默认的分析器,其中包括_all字段中的所有术语(以及其他内容),因此它将包含_all而不是{{1 }}