在同一个字段中匹配多个值

时间:2018-05-29 11:06:58

标签: elasticsearch

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

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

但它返回的文件与任何一个值相匹配。我是否必须将映射类型迁移到嵌套以处理此问题或 通过查询本身获得它的任何其他方式?

1 个答案:

答案 0 :(得分:3)

您可以使用terms_set queryminimum_should_match_script来返回数组的长度

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