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

ElasticSearch能否统计仅存在于文档集B的嵌套聚合词条?

新版ElasticSearch实现仅存在于指定文档集的嵌套词条聚合方案

完全可以实现你描述的需求,以下是具体的实现方案:

前提条件

确保你的嵌套字段已正确配置nested类型映射,示例映射如下:

{
  "mappings": {
    "properties": {
      "document_set": { "type": "keyword" },
      "fruits": {
        "type": "nested",
        "properties": {
          "fruit": { "type": "keyword" }
        }
      }
    }
  }
}

聚合查询DSL

通过嵌套聚合结合桶筛选脚本,直接获取仅存在于document_set: "b"、不存在于document_set: "a"的fruit词条:

{
  "size": 0,
  "aggs": {
    "nested_fruits_context": {
      "nested": {
        "path": "fruits"
      },
      "aggs": {
        "all_fruit_terms": {
          "terms": {
            "field": "fruits.fruit",
            "size": 10000 // 根据实际数据量调整大小
          },
          "aggs": {
            "document_set_distribution": {
              "terms": {
                "field": "document_set",
                "size": 2 // 仅需统计a和b两个集合
              }
            },
            "filter_only_in_b": {
              "bucket_selector": {
                "buckets_path": {
                  "count_a": "document_set_distribution>_bucket_count['a']",
                  "count_b": "document_set_distribution>_bucket_count['b']"
                },
                "script": "params.count_b > 0 && (params.count_a == null || params.count_a == 0)"
              }
            }
          }
        }
      }
    }
  }
}

逻辑说明

  1. nested_fruits_context:进入嵌套字段fruits的聚合上下文,确保能正确遍历嵌套数组中的每个元素
  2. all_fruit_terms:对所有fruit词条进行分组聚合
  3. document_set_distribution:针对每个fruit词条,统计其在document_set中的分布情况
  4. filter_only_in_b:通过脚本筛选出满足以下条件的词条:
    • 在document_set: "b"中有匹配的文档(count_b > 0)
    • 在document_set: "a"中没有匹配的文档(count_a为空或等于0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:12:57