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

ElasticSearch如何对嵌套对象数组按指定多条件筛选查询

ElasticSearch 嵌套对象数组多条件筛选方案

前置要求:字段类型定义

你的region字段必须在索引mapping中声明为nested类型,普通object类型会把嵌套对象的同名字段打平为独立数组,无法保证筛选条件作用在同一个嵌套对象上。

创建索引时的mapping示例:

PUT /你的索引名
{
  "mappings": {
    "properties": {
      "region": {
        "type": "nested",
        "properties": {
          "reg": { "type": "keyword" },
          "val": { "type": "integer" }
        }
      }
    }
  }
}

注意:如果你的索引已经创建,需要重建索引修改mapping后再导入数据,已存在的普通object类型字段无法直接转为nested类型。

符合要求的查询DSL

使用nested查询指定嵌套路径,内部用bool查询组合两个条件,确保两个条件同时匹配同一个嵌套对象:

POST /你的索引名/_search
{
  "query": {
    "nested": {
      "path": "region",
      "query": {
        "bool": {
          "must": [
            { "term": { "region.reg": "region1" } },
            { "range": { "region.val": { "gt": 2 } } }
          ]
        }
      }
    }
  }
}

补充说明

  • 上述查询只会返回region数组中存在同时满足reg=region1且val>2的单个对象的文档,你给出的示例数据中region1对应的val是2,不会被该查询命中。
  • 如需返回匹配到的具体嵌套对象,可以在nested查询中添加"inner_hits": {}参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:42:02