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

如何在ElasticSearch中实现带条件过滤的聚合查询

解决方案

要实现根据前缀筛选project字段的聚合结果,你需要替换原来的精确匹配逻辑,改用前缀匹配的方式,以下是两种可行的方法:

方法一:Filter聚合+Prefix查询

将原查询中的term过滤器替换为prefix查询,它会匹配所有字段值以指定前缀开头的文档,之后在这些文档上执行terms聚合:

{
  "aggs": {
    "filtered_projects": {
      "filter": {
        "prefix": {
          "project": "Cool"
        }
      },
      "aggs": {
        "project_names": {
          "terms": {
            "field": "project",
            "size": 2
          }
        }
      }
    }
  }
}

注意字段类型

如果你的project字段是text类型(会被分词),直接使用可能无法得到正确结果,此时应使用对应的keyword子字段(需确保mapping中已定义):

{
  "aggs": {
    "filtered_projects": {
      "filter": {
        "prefix": {
          "project.keyword": "Cool"
        }
      },
      "aggs": {
        "project_names": {
          "terms": {
            "field": "project.keyword",
            "size": 2
          }
        }
      }
    }
  }
}

方法二:直接在Terms聚合中使用Include参数

可以省略外层的filter聚合,直接在terms聚合里通过include参数用通配符过滤结果,Cool*表示匹配所有以Cool开头的值:

{
  "aggs": {
    "projects": {
      "terms": {
        "field": "project",
        "size": 2,
        "include": "Cool*"
      }
    }
  }
}

同样,如果字段是text类型,记得替换为project.keyword字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:10:54