首页 > 解决方案 > 匹配同一字段中的多个值

问题描述

1. [5463, 3452] , 2. [5467, 3452]在映射中有“路线”字段作为长类型(我在该示例中存储值数组)。在以下查询中,我想检索与同一记录中的 5463、3452 匹配的数据

GET /flight_routes/_search
{
    "query": {
    "bool": {
    "filter": {
        "terms": {
          "routes": [5463, 3452]
        }
      }
    }
    }
}

但它正在返回与任一值匹配的文档。我是否必须将映射类型迁移到嵌套来处理这个或任何其他方式来通过查询本身获取它?

标签: elasticsearch

解决方案


您可以将terms_set查询minimum_should_match_script返回数组长度的a 一起使用

POST /flight_routes/_search
{
    "query": {
        "terms_set": {
            "routes" : {
                "terms" : [5463, 3452],
                "minimum_should_match_script": {
                   "source": "params.nb_terms",
                   "params": {
                      "nb_terms": 2
                   }
                }
            }
        }
    }
}

推荐阅读