我正在编写一个查询字符串以匹配一个字段中的多个字符串。
我需要匹配类型为server_physical
的文档,并且有一个名为string
的{{1}}字段,其中包含cpu
,E5
和{{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*)"
答案 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 }}