分享缩略图

分享到:
链接已复制
首页> 新闻中心>

【elasticsearch系列11】聚合 DSL API

2025-06-24 12:03:53

来源:新华网

字体:

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

  • 推荐:kwan 主页,不断学习,不断总结,共同进步,活到老学到老。
  • 导航。
    • 檀越剑指大厂系列:全面总结: java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等。
    • 常用开发工具系列:常用开发工具,IDEA,Mac,Alfred,Git,typora 等。
    • 数据库系列:详细总结常用数据库 mysql 技术点,工作中遇到的技术点, mysql 问题等。
    • 新空间代码工作室:提供各种软件服务,承担各种毕业设计、毕业论文等。
    • 懒人运维系列:总结好用命令,解放双手不香吗?不需要两个操作就可以用一个命令完成。
    • 数据结构与算法系列:总结数据结构与算法,针对不同类型的训练,提高编程思维,剑指大厂。

我期待着在这个小小的网络世界里和你一起探索、学习和成长。💝💝💝 ✨✨ 本专栏欢迎订阅 ✨✨。

博客目录。

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.分组-分组-平均分组。

按照指定的价格范围分组,然后按每组 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" } } } } } } }}。如果觉得有用,点赞。
如果觉得有用,点赞。

👍🏻

呗。

img

❤️❤️❤️我的水平有限󿀌如果有错误,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果你认为这篇文章对你有帮助,也请给点赞,收藏一下,非常感谢!👍 👍 👍🔥🔥🔥Stay Hungry Stay Foolish 道阻又长,行则即将来临,让我们一起加油!🌙🌙🌙

【责任编辑:新华网】
返回顶部