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"
                      }
                 }
             } 
        } 
     } 
}
相关推荐
zzzll11111 小时前
SpringBoot 入门与实践指南
java·spring boot·后端
newerp1 小时前
Go :结构体嵌入、sort.Interface 与 io.Reader/Writer
后端
SamDeepThinking2 小时前
如何维持缓存的一致性?
后端·面试·程序员
泡海椒2 小时前
还在手动把 Postman 和浏览器的 curl 转成 Java 代码?这个框架让你一键粘贴直接用
后端
用户8181870627462 小时前
第13章 死锁诊断实战
后端
晨曦中的暮雨2 小时前
Redis 有哪些常见数据结构?它们的底层实现和使用场景是什么?
java·后端·八股
枫叶V2 小时前
Prompt Injection 防不住怎么办?从 Source-Sink 模型设计 Agent 安全边界
后端·agent
用户8181870627462 小时前
第14章 线程池 RejectedExecutionException 与拒绝策略源码
后端
Leo2822 小时前
LangGraph:把 Agent 从“会回答”推进到“可控执行”的工程架构
后端
铁皮饭盒2 小时前
网页端OCR, 加载6mb大小模型, 又快又准, 百度这次真香
前端·后端