elasticsearch bucket 之rare terms聚合

news2024/10/5 15:34:56

文章目录

  • 1、背景
  • 2、需求
  • 3、前置准备
    • 3.1 准备mapping
    • 3.2 准备数据
  • 4、实现需求
    • 4.1 dsl
    • 4.2 java代码
    • 4.3 运行结果
  • 5、max_doc_count 和 search.max_buckets
  • 6、注意事项
  • 7、完整代码
  • 8、参考文档

1、背景

我们知道当我们使用 terms聚合时,当修改默认顺序为_count asc时,统计的结果是不准备的,而且官方也不推荐我们这样做,而是推荐使用rare terms聚合。rare terms是一个稀少的term聚合,可以一定程度的解决升序问题。

2、需求

统计province字段中包含上和湖的term数据,并且最多只能出现2次。获取到聚合后的结果。

3、前置准备

3.1 准备mapping

PUT /index_person
{
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "long"
      },
      "name": {
        "type": "keyword"
      },
      "province": {
        "type": "keyword"
      },
      "sex": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "pipeline_province_sex":{
        "type": "keyword"
      },
      "address": {
        "type": "text",
        "analyzer": "ik_max_word",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    }
  }
}

3.2 准备数据


PUT /_bulk
{"create":{"_index":"index_person","_id":1}}
{"id":1,"name":"张三","sex":"男","age":20,"province":"湖北","address":"湖北省黄冈市罗田县匡河镇"}
{"create":{"_index":"index_person","_id":2}}
{"id":2,"name":"李四","sex":"男","age":19,"province":"江苏","address":"江苏省南京市"}
{"create":{"_index":"index_person","_id":3}}
{"id":3,"name":"王武","sex":"女","age":25,"province":"湖北","address":"湖北省武汉市江汉区"}
{"create":{"_index":"index_person","_id":4}}
{"id":4,"name":"赵六","sex":"女","age":30,"province":"北京","address":"北京市东城区"}
{"create":{"_index":"index_person","_id":5}}
{"id":5,"name":"钱七","sex":"女","age":16,"province":"北京","address":"北京市西城区"}
{"create":{"_index":"index_person","_id":6}}
{"id":6,"name":"王八","sex":"女","age":45,"province":"北京","address":"北京市朝阳区"}
{"create":{"_index":"index_person","_id":7}}
{"id":7,"name":"九哥","sex":"男","age":25,"province":"上海市","address":"上海市嘉定区"}

4、实现需求

4.1 dsl

GET /index_person/_search
{
  "size": 0,
  "aggs": {
    "agg_province": {
      "rare_terms": {
        "field": "province",
        "max_doc_count": 2,
        "precision": 0.01,
        "include": "(.*上.*|.*湖.*|.*江.*)",
        "exclude": ["江苏"],
        "missing": "default省"
      }
    }
  }
}

4.2 java代码

@Test
@DisplayName("稀少的term聚合,类似按照 _count asc 排序的terms聚合,但是terms聚合中按照_count asc的结果是不准的,需要使用 rare terms 聚合")
public void agg01() throws IOException {

    SearchRequest searchRequest = new SearchRequest.Builder()
            .size(0)
            .index("index_person")
            .aggregations("agg_province", agg ->
                    agg.rareTerms(rare ->
                            // 稀有词 的字段
                            rare.field("province")
                                    // 该稀有词最多可以出现在几个文档中,最大值为100,如果要调整,需要修改search.max_buckets参数的值(尝试修改这个值,不生效)
                                    // 在该例子中,只要是出现的次数<=2的聚合都会返回
                                    .maxDocCount(2L)
                                    // 内部布谷鸟过滤器的精度,精度越小越准,但是相应的消耗内存也越多,最小值为 0.00001,默认值为 0.01
                                    .precision(0.01)
                                    // 应该包含在聚合的term, 当是单个字段是,可以写正则表达式
                                    .include(include -> include.regexp("(.*上.*|.*湖.*|.*江.*)"))
                                    // 排出在聚合中的term,当是集合时,需要写准确的值
                                    .exclude(exclude -> exclude.terms(Collections.singletonList("江苏")))
                                    // 当文档中缺失province字段时,给默认值
                                    .missing("default省")
                    )
            )
            .build();
    System.out.println(searchRequest);
    SearchResponse<Object> response = client.search(searchRequest, Object.class);
    System.out.println(response);
}

一些注意事项都在注释中。

4.3 运行结果

运行结果

5、max_doc_count 和 search.max_buckets

max_doc_count 和 search.max_buckets

6、注意事项

  1. rare terms统计返回的数据没有大小限制,而且受max_doc_count参数的限制,比如:如果复合 max_doc_count 的分组有60个,那么这60个分组会直接返回。
  2. max_doc_count的值最大为100,貌似不能修改。
  3. 如果一台节点聚合收集的结果过多,那么很容易超过 search.max_buckets的值,此时就需要修改这个值。
# 临时修改
PUT /_cluster/settings
{"transient": {"search.max_buckets": 65536}}

# 永久修改
PUT /_cluster/settings
{"persistent": {"search.max_buckets": 65536}}

7、完整代码

https://gitee.com/huan1993/spring-cloud-parent/blob/master/es/es8-api/src/main/java/com/huan/es8/aggregations/bucket/RareTermsAggs.java

8、参考文档

  1. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-rare-terms-aggregation.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nodejs+mysql+vscode网上图书商城销售管理系统vue

当前社会是一个网络高度发达的社会&#xff0c;人们都处在互联网时代中&#xff0c;对于知识的获取都是通过互联网&#xff0c;为了鼓励人们积极获取纸质知识&#xff0c;我想要设计一个网上图书售卖系统。这个系统设计的目的是为了方便人们们作为参考资料. 网上图书管理系统的…

【31-业务开发-基础业务-品牌管理-级联类别信息业务功能实现-品牌管理和商品分类管理俩者业务关联出现数据冗余,导致数据不同步的问题-开启事务-项目测试】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

进 4 球得 1 分,阿根廷败北背后的科技与狠活

内容一览&#xff1a;11 月 22 日&#xff0c;世界杯 C 组首场比赛&#xff0c;沙特阿拉伯 2:1 反超阿根廷&#xff0c;今天我们将逐一盘点阿根廷进 4 球得 1 分背后的科技与狠活。 关键词&#xff1a;世界杯 VAR 半自动越位技术 沙特爆冷逆袭&#xff0c;2:1 反超阿根廷 2022…

如何改进企业旧式工时管理系统?

工时管理系统对企业很重要&#xff0c;特别是那些不太明显的知识性工作的企业。 一些企业仍在使用基于纸张的工时表管理&#xff0c;这通常会带来以下问题&#xff1a; ● 过程非常耗时 ● 人为错误的风险很高 ● 有道德上的漏洞&#xff0c;如同伴帮打卡和时间盗窃 ● 数据处…

【强化学习论文合集】AAAI-2022 强化学习论文合集(附论文链接)

强化学习&#xff08;Reinforcement Learning, RL&#xff09;&#xff0c;又称再励学习、评价学习或增强学习&#xff0c;是机器学习的范式和方法论之一&#xff0c;用于描述和解决智能体&#xff08;agent&#xff09;在与环境的交互过程中通过学习策略以达成回报最大化或实现…

【测试沉思录】16. 性能测试中的系统资源分析之三:磁盘

作者&#xff1a;马海琴 编辑&#xff1a;毕小烦 三. 磁盘 磁盘是可以持久化存储的设备&#xff0c;根据存储介质的不同&#xff0c;常见磁盘可以分为两类&#xff1a;机械磁盘和固态磁盘。磁盘就像人的大脑皮层&#xff0c;负责数据的储存、记忆。 磁盘对于服务器来说十分重…

大学生静态HTML网页源码——佛山旅游景点介绍网页代码 家乡旅游网页制作模板 web前端期末大作业

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

学生个人网页模板 简单个人主页--贝聿铭人物介绍 6页带表单 带报告3800字

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | ‍个人博客网站 | ‍个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 | 大学生个人HTML网页设计作品 | HTML期末大学生网页设计作业…

c语言:初识指针(二)

初识指针一.野指针1.野指针形成原因一是&#xff1a;未初始化2.野指针形成原因二&#xff1a;指针越界3.野指针形成原因三&#xff1a;指针所指向的内存空间被释放二.指针的运算1.指针-整数运算2.指针-指针3.指针的关系运算三.指针和数组四.二级指针五.指针数组1.定义2.用一维数…

APS生产计划排产在装备制造业的应用

装备制造业是对所有为国民经济各部门的简单再生产和扩大再生产提供技术装备的制造工业的总称&#xff0c;范围包括航空、航天、军工制造&#xff1b;民用飞机、铁路、船舶、汽车等先进交通运输设备制造&#xff1b;石油、矿产、化工、压力容器、电力成套设备制造&#xff1b;以…

Jaya算法在电力系统最优潮流计算中的应用(创新点)【Matlab代码实现】

目录 1 概述 2 数学模型 2.1 目标函数 2.2 约束条件 2.3 Jaya 算法 3 仿真结果 4 Matlab代码实现 1 概述 最优潮流计算与电力系统的稳定、经济运行密切相关&#xff0c;自20世纪60年代提出最优潮流的概念&#xff0c;大量学者相继提出了各种优化技术来求解电力系统的最…

Google Earth Engine(GEE)—— 多光谱指数整合中推导出湿地覆盖类型 (WCT)

湿地覆盖被定义为归因于植被、浑浊度、含水土壤和水量等潜在生物物理条件的湿地空间均匀区域。在这里,我们提出了一种新方法来导出湿地覆盖类型 (WCT),该方法结合了三个常用的多光谱指数 NDVI、MNDWI 和 NDTI,位于印度各地不同地貌和气候环境的三个大型拉姆萨尔湿地。这些湿…

【CNN】SENet——将注意力机制引入通道维度

前言 SENet&#xff0c;胡杰&#xff08;Momenta&#xff09;在2017.9提出&#xff0c;通过显式地建模卷积特征通道之间的相互依赖性来提高网络的表示能力&#xff0c;即&#xff0c;通道维度上的注意力机制。SE块以微小的计算成本为现有的最先进的深层架构产生了显著的性能改…

高等数学(第七版)同济大学 习题10-2(中5题) 个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题10-2&#xff08;中5题&#xff09; 函数作图软件&#xff1a;Mathematica 11.画出积分区域&#xff0c;把积分∬Df(x,y)dxdy表示为极坐标形式的二次积分&#xff0c;其中积分区域D是:\begin{aligned}&11. \ 画出积分…

算法图解学习2 大O表示

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼&#xff0c;常常是伪装起来的好运。 大O表示法是一种特殊的表示法&#xff0c;指出了算法的速度有多快。 背景引入 Bob要为NASA编写一个查找算法&…

MobaXterm连接报错Network error: Connection timed out

今天打开MobaXterm远程连接我VMware虚拟机的时候出现以下界面&#xff0c;问题详情如下&#xff1a;Network error: Connection timed out Session stopped - Press <return> to exit tab - Press R to restart session - Press S to save terminal output t…

RabbitMQ介绍

介绍 RabbitMQ是 一个由erlang语言编写的、开源的&#xff0c;基于AMQP协议实现的消息队列&#xff0c;具有MQ应用解耦、流量削峰、异步的特点 官网地址 https://www.rabbitmq.com/ 功能特点 支持顺序消息&#xff0c;保证消息送达消费端的前后顺序 支持消息补偿&#xff0…

计算机是什么

文章目录计算机是什么计算机类别计算机优缺点计算机应用实例计算机是什么 计算机&#xff08;英文“computer”&#xff09;一词源自拉丁文中的“computare”&#xff0c;本意为计算。 发展至今&#xff0c;计算机专门代指“可编程”的电子设备。所谓“可编程”&#xff0c;…

图像超分辨率模型:Real-ESRGAN | 论文阅读+实战记录

前言 最近需要一个超分的模型&#xff0c;经过调研准备用 Real-ESRGAN。特此记录论文阅读和实战过程。 论文阅读 论文地址&#xff1a;Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data Github&#xff1a;https://github.com/xinntao/Re…

[附源码]java毕业设计学生宿舍设备报修

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…