You need to enable JavaScript to run this app. Elasticsearch 带条件子聚合:筛选违规数≥5且许可证数≥3的商户
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch 带条件子聚合:筛选违规数≥5且许可证数≥3的商户

升级需求对应的Elasticsearch聚合改造方案

整体实现不需要改动原有的违规内容匹配逻辑,只需要在现有按商户分桶的聚合链路下,补充两层子聚合,分别完成“关联License编号的去重计数”、“双条件联合过滤”,即可同时满足两个筛选规则。

具体改造逻辑

  • 原查询块完全保留:之前编写的违规内容匹配规则(必须包含鼠粪观测记录、排除无鼠粪记录的文档)已经验证可正常运行,不需要做任何调整。
  • 原terms分桶配置保留:selected_bizs下按Biz Name.keyword分桶、设置min_doc_count:5的逻辑,已经天然覆盖“累计违规次数≥5次”的粗筛要求,无需修改。
  • 在selected_bizs的子聚合层级新增两个能力模块:
    1. License去重计数:新增cardinality类型的基数聚合,指定统计字段为License #.keyword,自动计算当前商户分桶下,所有关联文档涉及的不重复License编号总数。
    2. 双条件桶级过滤:新增bucket_selector类型的管道聚合,通过buckets_path引用两个统计值:一是当前商户分桶的文档数(即累计违规次数),二是上一步算出来的去重License数量,通过简单脚本判断:仅当违规次数≥5、关联去重License数≥3时,保留当前商户桶,否则直接从返回结果中剔除。

改造后完整可运行的查询代码

{
  "query": {
    "bool": {
      "must": {
        "match": {
          "violations": {
            "query": "MICE DROPPINGS were OBSERVED",
            "operator": "and"
          }
        }
      },
      "must_not": {
        "match": {
          "violations": {
            "query": "NO MICE DROPPINGS were OBSERVED",
            "operator": "and"
          }
        }
      }
    }
  },
  "aggs": {
    "selected_bizs": {
      "terms": {
        "field": "Biz Name.keyword",
        "min_doc_count": 5,
        "size": 1000
      },
      "aggs": {
        // 统计当前商户下关联的不重复License数量
        "unique_license_cnt": {
          "cardinality": {
            "field": "License #.keyword"
          }
        },
        // 按双条件过滤不符合要求的商户桶
        "filter_by_rule": {
          "bucket_selector": {
            "buckets_path": {
              "violation_total": "_count",
              "license_total": "unique_license_cnt"
            },
            "script": "params.violation_total >= 5 && params.license_total >=3"
          }
        },
        // 保留原有的商户详情取数逻辑
        "top_biz_hits": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}

注意事项

  • 统计License数量时必须使用带.keyword后缀的精确匹配字段,如果直接使用未分词的文本类字段,会因为分词规则导致去重计数结果出现偏差。
  • 原有的min_doc_count:5配置建议保留,相当于第一层粗筛,在进入后续计数、过滤逻辑前就把违规次数不达标的桶提前排除,能有效降低整体聚合的运算开销。
  • 如果单商户下的关联文档量极大(单商户累计文档超10万条),可以给cardinality聚合补充precision_threshold: 3000参数,在几乎不增加内存开销的前提下拉满计数精度,常规业务量级下使用默认配置即可满足精度要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 21:15:05