elasticsearch实现根据某一个字段去重后并求总数

这篇具有很好参考价值的文章主要介绍了elasticsearch实现根据某一个字段去重后并求总数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

版本说明:

elasticsearch:elasticsearch-7.12.1

kibana:kibana-7.12.1-windows-x86_64

原始数据:

_index _type _id _score address age bir id name

jason_doc_10

_doc

L2aqNoABfXKo_Zq7BPkO

1

中国深圳

69

1650184553376

daZhaoLiu

大赵六

jason_doc_10

_doc

MGaqNoABfXKo_Zq7mfma

1

中国上海市宝山区

20

1649862303342

user001

大张三

jason_doc_10

_doc

MWaqNoABfXKo_Zq7mfma

1

中国上海市浦东区

50

1649862303342

user00100

小张三

jason_doc_10

_doc

MmaqNoABfXKo_Zq7mfma

1

中国上海市黄埔

34

1649862303342

00user1

李四

jason_doc_10

_doc

M2aqNoABfXKo_Zq7mfma

1

上海普陀区

45

1649862303342

user0011

大李四

jason_doc_10

_doc

NGaqNoABfXKo_Zq7mfma

1

中国北京市朝阳区

62

1649862303342

user2201

小李四

jason_doc_10

_doc

NWaqNoABfXKo_Zq7mfma

1

中国北京市东城

42

1649862303342

78user01

王五

jason_doc_10

_doc

NmaqNoABfXKo_Zq7mfma

1

中国北京市西城区

12

1649862303342

22

大王五

jason_doc_10

_doc

N2aqNoABfXKo_Zq7mfma

1

北京市海淀区

18

1649862303342

user01

小王五

jason_doc_10

_doc

OGasNoABfXKo_Zq77Pkx

1

10

test_save_01

测试save用户

jason_doc_10

_doc

OWasNoABfXKo_Zq77Pmu

1

20

test_save_02

测试save用户_02

jason_doc_10

_doc

OmasNoABfXKo_Zq77Pmu

1

30

test_save_03

测试save用户_03

jason_doc_10

_doc

Q2aeO4ABfXKo_Zq7TvlP

1

广东省广州市天河区

55

1650267672018

daZhaoLiu

王海

 因为数据的原因,我这里只有年龄age字段有重复的,所以根据age去重。

DSL请求:

GET /jason_doc_10/_search
{
  "size": 0,
  "aggs": {
    "distic_age": {
      "cardinality": {
        "field": "age"
      }
    } 
  }
}

响应结果:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 13,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "distic_age" : {
      "value" : 12
    }
  }
}

java中的实现:

首先pom依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <version>2.6.6</version>
        </dependency>
<!--  注意:这里使用的ES版本是7.12.1,所以我本地安装的ES和kibana也是7.12.1 -->

 配置的客户端:HighLevelClient

@SpringBootConfiguration
public class RestHingLevelClient {

    @Bean
    public RestClientBuilder restClientBuilder() {
        return RestClient.builder(createHttpHost("127.0.0.1:9200"));
    }

    @Bean
    public RestHighLevelClient restHighLevelClient(@Autowired RestClientBuilder restClientBuilder) {
        return new RestHighLevelClient(restClientBuilder);
    }

    private HttpHost createHttpHost(String ipPort) {
        String[] split = ipPort.split(":");
        String ip = split[0];
        int port = Integer.parseInt(split[1]);
        return new HttpHost(ip, port, "http");
    }
}

测试类:文章来源地址https://www.toymoban.com/news/detail-400480.html

@SpringBootTest
public class TestQueryDocument {

    @Autowired
    @Qualifier(value = "restHighLevelClient")
    RestHighLevelClient client;

    @Test
    public void testDistinctByAge() throws IOException {
        // 创建查询请求
        SearchRequest request = new SearchRequest();
        request.indices("jason_doc_10");
        // 创建查询条件
        SearchSourceBuilder builder = new SearchSourceBuilder();
        // 根据年龄去重,并起别名为:distic_age
        builder.aggregation(AggregationBuilders.cardinality("distic_age").field("age"));
        request.source(builder);
        // 查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        Aggregations aggregations = response.getAggregations();
        ParsedCardinality cardinality = (ParsedCardinality) aggregations.asList().get(0);
        long count = cardinality.getValue();
        System.out.println("去重后的总数:" + count);
    }

到了这里,关于elasticsearch实现根据某一个字段去重后并求总数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch_dsl实现多字段查询去重过滤详解(script)

    ElasticSearch单字段去重详见博文:ElasticSearch单字段查询去重详解_IT之一小佬的博客-CSDN博客 ElasticSearch多字段去重详见博文:ElasticSearch多字段查询去重过滤详解_IT之一小佬的博客-CSDN博客 本博文将详细介绍使用elasticsearch_dsl进行多字段进行去重。本文示例数据详见上文单字段博

    2023年04月22日
    浏览(29)
  • SQL结果-根据某个字段取最新时间去重

    现在有个sql,如果“propertyId”相同,取“updateTime”时间最新的那条记录,其他过滤掉。 结果SQL 为了通过 propertyId 去重并获取每个 propertyId 对应的最新时间的记录,可以使用窗口函数 ROW_NUMBER() 来对每个分组进行排序,并在外部查询中取出 rn 列等于 1 的行,即每个分组中的第

    2024年02月07日
    浏览(41)
  • Java list集合中根据其中两个字段去重

    可以使用Java 8的Stream API和Collectors.toSet()方法来实现根据其中两个字段去重。 首先,使用Stream API将List转换为Stream,然后使用distinct()方法进行去重。distinct()方法默认使用元素的equals()和hashCode()方法进行去重。如果想要根据其中两个字段进行去重,需要重写equals()和hashCode()方法

    2024年02月16日
    浏览(38)
  • java stream distinct根据list某个字段去重

    java stream distinct根据list某个字段去重,普通List简单去重: 很显然这种满足不了需求,我们List里的是实体对象,这里的是字符串。 首先创建了一个Student类,该类包含id、name、age三个字段,使用了注解@Data,我们想根据学生的name去重。 一、Stream流 + TreeSet(推荐) 根据学生的

    2024年01月17日
    浏览(38)
  • 【MySQL】根据多个字段查询数据进行去重的sql编写

    一、实现思路 根据四个字段进行数据去重的SQL编写可以使用GROUP BY和HAVING子句来实现。 场景一: 假设有一个名为 table1 的数据表,其中包含四个字段: field1 、 field2 、 field3 和 field4 。要求根据这四个字段进行数据去重。 可以使用以下SQL语句: 场景二: 上述SQL语句会返回所

    2024年02月15日
    浏览(37)
  • SpringBoot环境MongoDB分页+去重+获取去重后的原始数据

    最近有个比较复杂的MongoDB查询需求, 要求1:获取最近订单表中的请求参数信息,并需要按照请求参数中的账号进行去重 要求2:数据量可能比较大,因此需要做分页查询 研究了大半天,终于搞出了解决方案,因此记录一下供有需要的同学参考。 感谢国家、感谢互联网、感觉

    2024年02月09日
    浏览(30)
  • Java中使用流将两个集合根据某个字段进行过滤去重?

    要是需要GPT Plus账号的小伙伴可以联系我~ 在Java中,您可以使用流(Stream)来过滤和去重两个集合。下面是一个示例代码,展示如何根据对象的某个字段进行过滤和去重操作: 在这个示例中,我们创建了一个 Person 类表示人员信息,包含 name 和 age 两个字段。我们使用流的 filte

    2024年02月12日
    浏览(32)
  • Java通过Lambda表达式根据指定字段去除重复数据(集合去重)

    这里博主给大家封装好了一个工具类,里面有两个方法。 方法一:可以根据指定字段去除重复数据。 方法二:可以获取到重复的数据。 大家在使用过程中直接拷贝下方代码在要去重的类中调用即可。 导入这个工具类后怎么使用呢?我们接着往下看。 List rstList = list.stream()

    2024年02月16日
    浏览(33)
  • Stream流实践(二):list 对象数组根据某字段去重的三种基本思路

    相信大家对于list简单数组的去重很熟悉了,例如以下代码 那我们来探讨下,对于list中保存为对象的数组,根据内部对象的 某一个字段 去重有什么好的思路呢? 给出一个简单的Student对象 大家学废了吗?

    2024年02月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包