【elasticsearch系列11】聚合 DSL API
2025-06-24 12:03:53
来源:新华网
💝💝💝欢迎来到我的博客,很高兴能在这里见到你!希望你能在这里感受到轻松愉快的氛围,不仅可以获得有趣的内容和知识,你也可以畅所欲言,分享你的想法和见解。
- 推荐:kwan 主页,不断学习,不断总结,共同进步,活到老学到老。
- 导航。
- 檀越剑指大厂系列:全面总结: java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等。
- 常用开发工具系列:常用开发工具,IDEA,Mac,Alfred,Git,typora 等。
- 数据库系列:详细总结常用数据库 mysql 技术点,工作中遇到的技术点, mysql 问题等。
- 新空间代码工作室:提供各种软件服务,承担各种毕业设计、毕业论文等。
- 懒人运维系列:总结好用命令,解放双手不香吗?不需要两个操作就可以用一个命令完成。
- 数据结构与算法系列:总结数据结构与算法,针对不同类型的训练,提高编程思维,剑指大厂。
我期待着在这个小小的网络世界里和你一起探索、学习和成长。💝💝💝 ✨✨ 本专栏欢迎订阅 ✨✨。
博客目录。
- 1.all-分组-计数。
- 2.分组-计数。
- 3.搜索-分组。
- 4.分组-平均。
- 5.分组-平均-排序。
- 6.分组-分组-平均分组。
1.all-分组-计数。
计算每个 studymodel 商品数量较低。
sql 句子: select studymodel,count(*) from book group by studymodel。
GET /book/_search{ "size": 0, "query": { "match_all": { } }, "aggs": { "group_by_model": { "terms": { "field": "studymodel" } } }}。
2.分组-计数。
计算每个 tags 下面的商品数量。
设置字段"fielddata": true,这一步很重要,否则会报错。
在 es 中,text 使用一种叫做类型字段的字段 fielddata 内存数据结构在查询过程中。当字段被排序时,#xff0c;这种数据结构将在通过脚本访问聚合或创建。它是通过从磁盘读取每个段落的整个反向索引来构建的,然后存储 java 堆内存中。
fileddata 默认情况是不开放的。Fielddata 可能会消耗大量的堆空间,特别是在加载高基数文本字段时。一旦 fielddata 已加载到堆中它将保留在这个生命周期中。另外,加载 fielddata 这是一个昂贵的过程,可能会导致用户遇到延迟命中。这是默认情况下禁止的 fielddata 的原因。试图对文本字段进行排序,聚合或脚本访问,xff11将看到以下异常a;
“Fielddata is disabled on text fields by default. Set fielddata=true on [your_field_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.”。
在启用 fielddata 之前,请考虑使用文本字段聚合#xff0c;排序或脚本的原因。这通常毫无意义。text 例如,索引中的字段 New York 这样的词会被分词,会被拆成 new,york。上面有一个字段 terms 回到一个聚会 new 的 bucket 和一个 york 的 bucket,当你想只回一个的时候 New York 的 bucket 会出现问题。
PUT /book/_mapping/{ "properties": { "tags": { "type": "text", "fielddata": true } }}。
查询。
GET /book/_search{ "size": 0, "query": { "match_all": { } }, "aggs": { "group_by_tags": { "terms": { "field": "tags" } } }}。
3.搜索-分组。
添加搜索条件༌计算每个 tags 下面的商品数量。
GET /book/_search{ "size": 0, "query": { "match": { "description": "java程序员" } }, "aggs": { "group_by_tags": { "terms": { "field": "tags" } } }}。
4.分组-平均。
先分组,再计算每组的平均值,计算每个 tag 以下商品的平均价格。
GET /book/_search{ "size": 0, "aggs" : { "group_by_tags" : { "terms" : { "field" : "tags" }, "aggs" : { "avg_price" : { "avg" : { "field" : "price" } } } } }}。
5.分组-平均-排序。
5.分组-平均-排序
计算每个。 tag 以下商品的平均价格,并按平均价格进行排序。
GET /book/_search{ "size": 0, "aggs" : { "group_by_tags" : { "terms" : { "field" : "tags", "order": { "avg_price": "desc" } }, "aggs" : { "avg_price" : { "avg" : { "field" : "price" } } } } }}。
6.分组-分组-组内平均。
6.分组-分组-平均分组。
❤️❤️❤️我的水平有限如果有错误,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果你认为这篇文章对你有帮助,也请给点赞,收藏一下,非常感谢!👍 👍 👍🔥🔥🔥Stay Hungry Stay Foolish 道阻又长,行则即将来临,让我们一起加油!🌙🌙🌙按照指定的价格范围分组,然后按每组 tag 分组,最后计算每组的平均价格。
GET /book/_search{ "size": 0, "aggs": { "group_by_price": { "range": { "field": "price", "ranges": [ { "from": 0, "to": 40 }, { "from": 40, "to": 60 }, { "from": 60, "to": 80 } ] }, "aggs": { "group_by_tags": { "terms": { "field": "tags" }, "aggs": { "average_price": { "avg": { "field": "price" } } } } } } }}。
如果觉得有用,点赞。
如果觉得有用,点赞。👍🏻
呗。