可以使用ES的bool查询和must语句结合使用来实现这个功能。具体步骤如下:

  1. 创建一个bool查询,将其设置为must语句的容器。

  2. 在bool查询中添加一个should语句,用于匹配数组中的每个元素。

  3. 将should语句的数量设置为数组的长度。

  4. 对于每个should语句,都使用一个term查询来匹配数组中的一个元素。

  5. 最后执行这个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"时,才算匹配成功

ES的查询如何给一个数组必须包含数组内所有值才算匹配成功?

原文地址: https://www.cveoy.top/t/topic/c2dj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录