• es: java->count统计、distinct去重


     1 统计count

    1. GET /indexname/_count
    2. {
    3. "query": {
    4. "range": {
    5. "dataTime": {
    6. "from": "2023-01-22",
    7. "to": null,
    8. "include_lower": true,
    9. "include_upper": true,
    10. "format": "yyyy-MM-dd HH:mm:ss||yyyy||yyyy-MM-dd",
    11. "boost": 1
    12. }
    13. }
    14. }
    15. }
    16. /**
    17. * 查询指定索引文档总数(可增加查询条件,如果为空,则查询所有)
    18. */
    19. @Test
    20. public void testCount() {
    21. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    22. CountRequest countRequest = new CountRequest();
    23. //构造查询条件
    24. RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("dataTime").gte("2023-01-22").format("yyyy-MM-dd HH:mm:ss||yyyy||yyyy-MM-dd");
    25. searchSourceBuilder.query(rangeQueryBuilder);
    26. countRequest.indices("indexname").source(searchSourceBuilder);
    27. CountResponse countResponse = null;
    28. try {
    29. countResponse = restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);
    30. return countResponse.getCount();
    31. } catch (IOException e) {
    32. log.error("[EsClientConfig.countDocumentSize][error][fail to count document size,param is {}]", countRequest);
    33. }
    34. return 0;
    35. log.info("[document size is {}, indexName is {}]", size, indexName);
    36. }
    37. \

    2. 使用agge 统计

    在过滤条件后,统计总数(count), dinsticn , count(distinct())

    1. GET /indexName/_search
    2. {
    3. "size": 0,
    4. "query": {
    5. "range": {
    6. "dataTime": {
    7. "from": "2023-01-22",
    8. "to": null,
    9. "include_lower": true,
    10. "include_upper": true,
    11. "format": "yyyy-MM-dd HH:mm:ss||yyyy||yyyy-MM-dd",
    12. "boost": 1
    13. }
    14. }
    15. },
    16. "aggregations": {
    17. "objtypename": {
    18. "terms": {
    19. "field": "externalObj",
    20. "size": 100,
    21. "min_doc_count": 1,
    22. "shard_min_doc_count": 0,
    23. "show_term_doc_count_error": false,
    24. "order": [
    25. {
    26. "_count": "desc"
    27. },
    28. {
    29. "_key": "asc"
    30. }
    31. ]
    32. }
    33. },
    34. "objtypecount": {
    35. "cardinality": {
    36. "field": "externalObj"
    37. }
    38. },
    39. "total_count":{
    40. "value_count": {
    41. "field": "id.keyword"
    42. }
    43. }
    44. }
    45. }
    1. RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(httpHostsList.toArray(new HttpHost[httpHostsList.size()])));
    2. SearchRequest searchRequest = new SearchRequest();
    3. searchRequest.indices("indexName");
    4. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    5. RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("dataTime").gte("2023-01-22").format("yyyy-MM-dd HH:mm:ss||yyyy||yyyy-MM-dd");
    6. TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("objtypename").field("externalObj").size(100);
    7. CardinalityAggregationBuilder cardinalityAggregationBuilder = AggregationBuilders.cardinality("objtypecount").field("externalObj");
    8. ValueCountAggregationBuilder valueCountAggregationBuilder = AggregationBuilders.count("total_count").field("id.keyword");
    9. searchSourceBuilder.query(rangeQueryBuilder);
    10. searchSourceBuilder.aggregation(termsAggregationBuilder);
    11. searchSourceBuilder.aggregation(cardinalityAggregationBuilder);
    12. searchSourceBuilder.aggregation(valueCountAggregationBuilder);
    13. searchSourceBuilder.size(0);
    14. System.out.println("----"+searchSourceBuilder.toString());
    15. searchRequest.source(searchSourceBuilder);
    16. SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    17. // 打印: objtypename,objtypecount,total_count
    18. Aggregations aggregations = searchResponse.getAggregations();
    19. for(Aggregation aggregation : aggregations.asList()){
    20. System.out.println("---"+aggregation.getName());
    21. }
    22. // distict
    23. Terms objtypenameTerms = aggregations.get("objtypename");
    24. for(Terms.Bucket bucket : objtypenameTerms.getBuckets()){
    25. System.out.println("***"+ bucket.getKeyAsString()+" : "+bucket.getDocCount() );
    26. }
    27. // count(disinct)
    28. Cardinality cardinality = aggregations.get("objtypecount");
    29. System.out.println("---"+cardinality.getValue());
    30. //count
    31. ValueCount valueCount = aggregations.get("total_count");
    32. System.out.println("^^^"+ valueCount.getValue());

  • 相关阅读:
    金融数据合规管理研究
    [学习记录] 设计模式 3. 观察者模式
    git - 拉取远程代码并且不覆盖本地修改的代码
    MySql 用命令清空数据表
    SqlBoy:分组问题
    【Java 进阶篇】MySQL 事务详解
    网络文件转换为转成MultipartFile
    Git常用命令
    ISP图像信号处理——平场校正介绍以及C++实现
    Windows8.1 安装VC++6.0 注意事项
  • 原文地址:https://blog.csdn.net/zhuchunyan_aijia/article/details/133982662