【问题标题】:Matching multiple values in same field匹配同一字段中的多个值
【发布时间】:2018-05-29 19:48:44
【问题描述】:

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

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

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

【问题讨论】:

标签: elasticsearch


【解决方案1】:

您可以将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
                   }
                }
            }
        }
    }
}

【讨论】:

  • 这将应用“OR”条件。我想检索同时具有 5463 和 3452 的路由。
  • 你试过了吗? minimum_should_match_script 在这种情况下将返回 2,因此 2 个术语必须匹配
  • 是的,我试过了,它返回的文档只有 5463、3452 和 5463。我只需要包含 5463、3452(完全匹配)的文档
  • 我的错,我已经更新了脚本,实际上你需要在查询中传递术语的数量,这样就可以了。
猜你喜欢
  • 1970-01-01
  • 2019-09-02
  • 2021-04-17
  • 2018-03-09
  • 2021-08-18
  • 1970-01-01
  • 2018-08-14
  • 2023-04-04
  • 2018-02-03
相关资源
最近更新 更多