java实现es的折线图和统计图聚合

本文介绍在Java中使用ES语句进行查询和数据获取。先给出ES固定写法代码,接着说明在Java聚合中使用AggregationBuilders调用agg相关内容,设置时间分割方式,统计出现数量。还提及执行ES语句可能抛异常的处理,以及从桶中取数据的方式,最后给出相关官网文档链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天说了在kibana中使用es的语句查询折线图和统计图,今天废话少说直接上代码
es固定写法

      SearchRequest request = new SearchRequest(indices);
      SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
      BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

这里我们可以使用这个代码对应的就是我昨天写的filter 的部分

RangeQueryBuilder time = QueryBuilders.rangeQuery("metaData.pubTime").gte(timeNodeTotal.getStartTime()).lte(timeNodeTotal.getEndTime());

对应以下代码
在这里插入图片描述
接下来就是写我们agg的东西在java聚合当中aggas我们使用
AggregationBuilders 来调用以下是代码

AggregationBuilder aggregationBuilder = AggregationBuilders.dateHistogram("aggas")
                .field("metaData.pubTime")
                .fixedInterval(DateHistogramInterval.hours(timeNodeTotal.getDivision()))
                .minDocCount(0);

这里我使用aggas为桶 在java聚合当中,我们需要的是桶来操作我们的数据在上面调用中对应的Es代码模块是以下内容。
在这里插入图片描述

这个时候就已经把安时间分割已经出来了,fixedInterval(DateHistogramInterval.hours()) 中是设置你为什么分割。我在源码里面发现他里面也可以使用他定义好的间隔,我当前是因为项目需要人工控制时间使用就没有使用他自己的定义好的,这里源码可以看见,1秒,1分钟,1小时等等,需要的可以自己在源码里面选择自己需求所需要的
在这里插入图片描述
下面就是统计出现的数量

 TermsAggregationBuilder webtotal = AggregationBuilders.terms("webtotal").field("metaData.website").size(10000);

对应Es代码为
在这里插入图片描述
现在已经把Es语句在java中写好了执行

 searchSourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));
 searchSourceBuilder.query(boolQueryBuilder).aggregation(aggregationBuilder);
 searchSourceBuilder.query(boolQueryBuilder).aggregation(webtotal);
 searchSourceBuilder.query(boolQueryBuilder);
 request.source(searchSourceBuilder);
 SearchResponse  search = client.search(request, RequestOptions.DEFAULT);

这里代码中 SearchResponse search = client.search(request, RequestOptions.DEFAULT);
可能是会抛异常 看情况处理

取Es中查询出来的内容,在平时去es数据的时候都是

search.getHits().getHits()

然后在get出所有数据循环就可以得到数据,但是现在我是创建了桶,所以是要在桶中取数据

通过取桶有很多方式,目前我使用了两种

第一种

  ArrayList<Map<String, Object>> DataList = new ArrayList<>();
  Aggregation agg = search.getAggregations().get("aggas");
  List<? extends Histogram.Bucket> buckets = ((Histogram) agg).getBuckets();
  for (Histogram.Bucket bucket : buckets) {   
        HashMap<String, Object> tetool = new HashMap<>();
        tetool.put("data", bucket.getKeyAsString());
        tetool.put("dataCount", bucket.getDocCount());
        DataList.add(tetool);
        }

第二种

 ArrayList<Map<String, Object>> weblist = new ArrayList<>();
    Terms web = search.getAggregations().get("webtotal");
    List<? extends Terms.Bucket> webBuckets = web.getBuckets();    

在这里的时候和上面一样foreach 循环拿出来就可以 在我这里我对数据全是用的map储存的,用万能的map处理当然不是唯一的 。
如果对于上面Es语句不懂的:点击这里
Es7.6官网文档:点击这里
多看官网,我的聚合也是看官方文档一点点磨出来的

引用中提到,在使用echarts折线图时,可以通过配置项中的data的value选项来单独设置某一个数据的显示样式。这意味着你可以为不同的数据设置不同的小圆点样式。 引用中给出了一个查询数据的时间范围以及serviceId的数量折线图的示例代码。这段代码使用Elasticsearch的查询语句,通过设定startTime的范围serviceId的匹配条件,获取在指定时间范围内符合条件的数据,并以折线图的形式展示。 引用中提到了一个symbol的设置,它是一个图片的URL,可以用于自定义折线图中的数据点的样式。你可以使用一个base64编码的图片URL来代替默认的圆点样式。 综上所述,elastic折线图是一种使用Elasticsearchecharts库结合的方式,用于展示查询数据的变化趋势。它可以根据不同的需求进行定制,包括设置不同数据的显示样式自定义数据点的样式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [echarts 设置折线图单个数据小圆圈样式](https://blog.youkuaiyun.com/weixin_39804059/article/details/112044890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ES聚合查询,折线图统计](https://blog.youkuaiyun.com/whatzhang007/article/details/120157705)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值