当前位置: 首页 > news >正文

【Elasticsearch系列十一】聚合 DSL API

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐: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 的查询时内存数据结构。当字段被排序,聚合或者通过脚本访问时这种数据结构会被创建。它是通过从磁盘读取每个段的整个反向索引来构建的,然后存存储在 java 的堆内存中。

fileddata 默认是不开启的。Fielddata 可能会消耗大量的堆空间,尤其是在加载高基数文本字段时。一旦 fielddata 已加载到堆中,它将在该段的生命周期内保留。此外,加载 fielddata 是一个昂贵的过程,可能会导致用户遇到延迟命中。这就是默认情况下禁用 fielddata 的原因。如果尝试对文本字段进行排序,聚合或脚本访问,将看到以下异常:

“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 之前,请考虑使用文本字段进行聚合,排序或脚本的原因。这样做通常没有意义。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.分组-平均-排序

计算每个 tag 下的商品的平均价格,并且按照平均价格降序排序

GET /book/_search
{"size": 0,"aggs" : {"group_by_tags" : {"terms" : {"field" : "tags","order": {"avg_price": "desc"}},"aggs" : {"avg_price" : {"avg" : { "field" : "price" }}}}}
}

6.分组-分组-组内平均

按照指定的价格范围区间进行分组,然后在每组内再按照 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"}}}}}}}
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img


http://www.mrgr.cn/news/29385.html

相关文章:

  • html,css基础知识点笔记(二)
  • UE4_后期处理六—复古电视效果
  • RTX 4090 系列即将停产,RTX 5090 系列蓄势待发
  • uniapp 发布苹果IOS详细流程,包括苹果开发者公司账号申请、IOS证书、.p12证书文件等
  • 上海人工智能实验室开源视频生成模型Vchitect 2.0 可生成20秒高清视频
  • 项目实战 (13)--- 内部并发多线程一致性处理
  • 回收站永久删除的文件还能恢复吗?教你恢复技巧
  • MQTT协议
  • Android开发高频面试题之——Android篇
  • Node.js 学习
  • TCRT5000红外循迹模块简介
  • C语言中的输入输出艺术:深入解析puts/printf与gets/scanf
  • springboot整合mybatis(使用druid线程池)
  • 宝兰德MCP系列介绍 ①:中间件管理能力全线升级,驱动企业数字化管理效能提升
  • 6.Java高级编程 输入和输出处理一
  • 魅思-视频管理系统 getOrderStatus SQL注入漏洞复现
  • 【系统架构设计师】软件架构的风格(经典习题)
  • 5.内容创作的未来:ChatGPT如何辅助写作(5/10)
  • FreeRTOS单多核调度
  • Shell脚本编程基础(二)