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

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

但是它正在返回与任一值匹配的文档。我是否必须将映射类型迁移到嵌套以处理此问题,或者
还有其他方法可以通过查询本身获取它吗?

最佳答案

您可以将 terms_set query与返回数组长度的minimum_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
                   }
                }
            }
        }
    }
}

关于elasticsearch - 匹配同一字段中的多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50582836/

10-11 08:14