Elasticsearch-使用匹配查询和术语查询的“ OR”查询条件
我有以下 查询字符串:
curl -XGET 'my-es.com/my_indice/_search?pretty' -d '{ "size" : 10,
"query" : {
"bool" : {
"must" : [ {
"match" : {
"state" : {
"query" : ["ACTIVE", "INACTIVE"],
"type" : "boolean"
}
}
}]
}
}
}'
我想它的意思是"state" = "ACTIVE" or "state" = "INACTIVE"
,但实际上它能执行"state" =
"INACTIVE"。
然后我尝试了 查询字符串:
curl -XGET 'my-es.com/my_indice/_search?pretty' -d '{ "size" : 10,
"query" : {
"bool" : {
"must" : [{
"terms" : { "state" : ["ACTIVE", "INACTIVE"] }
}]
}
}
}'
它执行"state" = "ACTIVE" or "state" = "INACTIVE"
,显示 查询通过数组支持多个OR条件。
我很好奇为什么 查询不支持通过数组的 条件?并且它不显示任何语法错误。
回答:
该match
查询仅支持要指定的单个字符串值。官方match
文档中没有明确指定它,但是如果您愿意阅读的源代码MatchQueryParser.java
,则可以看到,在解析query
字段时,解析器将跳过标记来分隔数组的开始和结束,并始终覆盖value
解析了最新的内容,因此您为什么要看到所看到的内容,即仅state
与之匹配INACTIVE
。
但是,您可以做的是将两个标记放在同一个字符串中,如下所示,并且将考虑两个标记:
curl -XGET 'my-es.com/my_indice/_search?pretty' -d '{ "size" : 10,
"query" : {
"bool" : {
"must" : [ {
"match" : {
"state" : {
"query" : "ACTIVE INACTIVE",
"type" : "boolean"
}
}
}]
}
}
}'
以上是 Elasticsearch-使用匹配查询和术语查询的“ OR”查询条件 的全部内容, 来源链接: utcz.com/qa/434108.html