Elastic Search 聚合查询

在es简单查询之外,还有更高级的聚合查询,这些基本上都是会大大减少生成需求数据所需的时间。

如果说 Query 决定查哪些文档,

Aggregation 决定从这些文档里能算出什么世界。

这其中就包括:

1.value_count:统计字段非空数量

得到该索引的数量之和,一般用于列表展示

js 复制代码
GET order_index/_search 
    { "size": 0, 
      "aggs": 
        { "order_count": 
            { "value_count": { "field": "orderId" }} 
        } 
    }

2.terms:分组聚合

等同于group by

根据所选字段,自动分组并且得出数量,一般用于列表标签展示的时候来显示各个标签有多少数据。

js 复制代码
GET order_index/_search 
{ 
    "size": 0, 
    "aggs": 
        { "by_status": 
            { "terms": { "field": "status.keyword" }} 
        } 
 }

3.分组 + 指标聚合

根据分组的个个数据,对内求和

js 复制代码
GET order_index/_search 
{ "size": 0, 
    "aggs": { 
    "by_status": { 
        "terms": { "field": "status.keyword" },
        "aggs": { 
            "total_amount": { "sum": { "field": "amount" } }
           } 
        }
    } 
}

4.过滤 + 聚合

通过query过滤数据,在使用agg来聚合数据。

js 复制代码
GET order_index/_search 
{ "size": 0, 
    "query": { 
        "term": { "status.keyword": "PAID" } 
    }, 
    "aggs": { 
        "avg_amount": { "avg": { "field": "amount" } } 
    } 
}

5.date_histogram 时间聚合

根据时间格式进行聚合

js 复制代码
GET order_index/_search 
{ "size": 0, 
    "aggs": { 
        "order_by_day": { 
            "date_histogram": { 
            "field": "createTime", "calendar_interval": "day", "format": "yyyy-MM-dd" } 
        } 
    } 
}

6.Bucket 筛选

script 进行筛选,只能在聚合之后

js 复制代码
{"size": 0, 
    "aggs": { 
        "by_status": {
            "terms": { "field": "status.keyword" }, 
            "aggs": { 
                 "order_filter": { 
                     "bucket_selector": { 
                         "buckets_path": { "cnt": "_count" }, 
                         "script": "params.cnt >= 100"
                      }
                 }
             } 
        } 
     } 
}
相关推荐
追逐时光者1 天前
一个致力于为 C# 程序员提供更佳的编码体验和效率的 Visual Studio 扩展插件
后端·c#·visual studio
行百里er1 天前
用 ThreadLocal + Deque 打造一个“线程专属的调用栈” —— Spring Insight 的上下文管理术
java·后端·架构
玄〤1 天前
黑马点评中 VoucherOrderServiceImpl 实现类中的一人一单实现解析(单机部署)
java·数据库·redis·笔记·后端·mybatis·springboot
J_liaty1 天前
Spring Boot拦截器与过滤器深度解析
java·spring boot·后端·interceptor·filter
短剑重铸之日1 天前
《7天学会Redis》Day2 - 深入Redis数据结构与底层实现
数据结构·数据库·redis·后端
码事漫谈1 天前
从C++到C#的转型完全指南
后端
码事漫谈1 天前
TCP心跳机制:看不见的“生命线”
后端
lpfasd1231 天前
Spring Boot 4.0.1 时变更清单
java·spring boot·后端
梦梦代码精1 天前
《全栈开源智能体:终结企业AI拼图时代》
人工智能·后端·深度学习·小程序·前端框架·开源·语音识别
Victor3561 天前
Hibernate(42)在Hibernate中如何实现分页?
后端