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

Elasticsearch嵌套查询后过滤并映射结果的实现需求

Elasticsearch查询与数据提取方案

背景与需求

现有索引数据结构(嵌套类型payload)如下:

{
  "payload": [
    {
      "category": "GENRE",
      "value": "Comedy"
    },
    {
      "category": "DATE",
      "value": "1970-01-01T00:00:00"
    },
    {
      "category": "COLOUR",
      "value": "Red"
    },
    {
      "category": "COLOUR",
      "value": "Green"
    }
  ]
}

需要实现的查询逻辑:

  1. 筛选出payload中包含category为GENRE且value为Comedy的文档
  2. 提取这些文档里payload中category=COLOUR的所有value,最终输出格式为:
{
  "values": [
    "Red",
    "Green"
  ]
}

现有问题

你提供的查询语句使用了嵌套查询,但条件匹配的是ASSET相关内容,未对应需求中的GENRE=Comedy筛选,同时也没有做后续的数据提取处理。

正确实现方案

方案一:使用聚合高效提取(推荐批量场景)

通过嵌套查询筛选文档,再结合聚合提取目标颜色值:

GET /dev_video_clip_59f977063265a634a8ae15bf/_search
{
  "size": 0, // 无需返回原始文档,仅获取聚合结果
  "query": {
    "nested": {
      "path": "payload",
      "query": {
        "bool": {
          "must": [
            { "match": { "payload.category": "GENRE" } },
            { "match": { "payload.value": "Comedy" } }
          ]
        }
      }
    }
  },
  "aggs": {
    "filter_colour_entries": {
      "nested": {
        "path": "payload"
      },
      "aggs": {
        "only_colour_category": {
          "filter": {
            "match": { "payload.category": "COLOUR" }
          },
          "aggs": {
            "colour_value_list": {
              "terms": {
                "field": "payload.value.keyword", // 使用keyword字段保证精确匹配
                "size": 100 // 根据实际数据量调整上限
              }
            }
          }
        }
      }
    }
  }
}

结果处理

聚合返回结果中,aggregations.filter_colour_entries.only_colour_category.colour_value_list.buckets下的每个key就是需要的颜色值,将这些key收集后即可生成目标格式的输出。

方案二:使用inner_hits提取(适合单/少量文档)

通过inner_hits直接返回符合条件的payload条目,再提取value:

GET /dev_video_clip_59f977063265a634a8ae15bf/_search
{
  "_source": false, // 不返回完整原始文档
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "payload",
            "query": {
              "bool": {
                "must": [
                  { "match": { "payload.category": "GENRE" } },
                  { "match": { "payload.value": "Comedy" } }
                ]
              }
            }
          }
        }
      ]
    }
  },
  "inner_hits": {
    "colour_payload": {
      "path": "payload",
      "query": {
        "match": { "payload.category": "COLOUR" }
      },
      "_source": ["payload.value"] // 仅返回value字段
    }
  }
}

结果处理

从返回的hits.hits[].inner_hits.colour_payload.hits.hits中提取每个文档的_source.payload.value,收集后整理成目标格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:24:52