es 聚合方式

ES支持灵活的聚合方式,它不仅支持聚合和查询相结合,而且还可以使聚合的过滤条件不影响搜索条件,并且还支持在聚合后的结果中进行过滤筛选。

 

直接聚合

直接聚合指的是聚合时的DSL没有query子句,是直接对索引内的所有文档进行聚合。

复制代码
GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "my_agg": { //聚合名称 
      "avg": {
        "field": "price" //计算文档的平均价格 
      }
    }
  }
}
复制代码

 

先查询再聚合

与直接聚合相对应,这种查询方式需要增加query子句,query子句和普通的query查询没有区别,参加聚合的文档必须匹配query查询。

复制代码
{
  // "size": 0,
  "query": { //指定查询query逻辑 
    "term": {
      "city": {
        "value": "北京"
      }
    }
  },
  "aggs": { //指定聚合逻辑 
    "my_agg": {
      "avg": {
        "field": "price"
      }
    }
  }
}
复制代码

 

前过滤器

有时需要对聚合条件进一步地过滤,但是又不能影响当前的查询条件。

复制代码
{
  "size": 0,
  "query": { //指定查询的query逻辑 
    "term": {
      "city": {
        "value": "青岛"
      }
    }
  },
  "aggs": {
    "my_agg": {
      "filter": { //指定过滤器逻辑 
        "term": {
          "full_room": true
        }
      },
      "aggs": { //指定聚合逻辑 
        "my_avg": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}
复制代码

 

后过滤器

该过滤器是在查询和聚合之后进行过滤的,因此它的过滤条件对聚合没有影响。

复制代码
{
  //"size": 0,  
  "query": { //指定查询的query逻辑 
    "match": {
      "title": "酒店"
    }
  },
  "aggs": { //指定聚合逻辑 
    "my_agg": {
      "avg": {
        "field": "price",
        "missing": 200
      }
    }
  },
  "post_filter": { //指定后过滤器逻辑 
    "term": {
      "city": "北京"
    }
  }
}
复制代码

 

posted @   草木物语  阅读(871)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示