You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch:如何过滤inner_hits仅返回cp值为true的嵌套文档

解决Elasticsearch嵌套字段过滤问题

我懂你的困扰——明明要筛选data.addresses.ces.cp为true的条目,结果inner_hits里还是混进了cp=false的内容。这是因为你当前的外层嵌套查询只是确认某个addresses下存在符合条件的ces元素,但inner_hits默认会返回该addresses下所有ces数组项,不会自动过滤不符合要求的元素。

要精准拿到目标内容,你需要在inner_hits内部也添加对应的过滤条件,确保只返回cp=true的ces条目。修改后的查询如下:

{
  "_source": "created_at",
  "size": 1,
  "sort": [
    {
      "created_at.keyword": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "nested": {
      "path": "data.addresses",
      "inner_hits": {
        "_source": ["data.addresses.ces.secondname", "data.addresses.ces.cp"],
        "size": 100,
        "query": {
          "nested": {
            "path": "data.addresses.ces",
            "query": {
              "match": {
                "data.addresses.ces.cp": "true"
              }
            }
          }
        }
      },
      "query": {
        "nested": {
          "path": "data.addresses.ces",
          "query": {
            "match": {
              "data.addresses.ces.cp": "true"
            }
          }
        }
      }
    }
  }
}

关键修改说明:

  • 在inner_hits对象中新增了query字段,同样用nested查询针对data.addresses.ces路径,过滤cp=true的元素。这样inner_hits就只会返回符合该条件的ces条目,而非整个数组。

修改后你会得到预期的正确输出:

"ces" : [
  { "secondname" : "lopez", "cp" : true }
]

内容的提问来源于stack exchange,提问作者Miguel Barrios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:12:53