ES的查询如何给一个数组必须包含数组内所有值才算匹配成功?
可以使用ES的bool查询和must语句结合使用来实现这个功能。具体步骤如下:
-
创建一个bool查询,将其设置为must语句的容器。
-
在bool查询中添加一个should语句,用于匹配数组中的每个元素。
-
将should语句的数量设置为数组的长度。
-
对于每个should语句,都使用一个term查询来匹配数组中的一个元素。
-
最后执行这个bool查询,只有当所有的should语句都匹配成功时,才算整个查询匹配成功。
示例代码如下:
POST /my_index/_search
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{ "term": { "my_field": "value1" } },
{ "term": { "my_field": "value2" } },
{ "term": { "my_field": "value3" } }
],
"minimum_should_match": 3
}
}
]
}
}
}
上面的示例中,假设要匹配的字段为my_field,要匹配的数组为["value1", "value2", "value3"],则只有当my_field字段的值同时包含"value1"、"value2"、"value3"时,才算匹配成功
原文地址: https://www.cveoy.top/t/topic/c2dj 著作权归作者所有。请勿转载和采集!