es1.7.2 按照_type先聚合,再按照时间二次聚合

这篇具有很好参考价值的文章主要介绍了es1.7.2 按照_type先聚合,再按照时间二次聚合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 // 设置查询条件
        if (this.query != null) {
            this.searchbuilder.setQuery(this.query);
        }
        TermsBuilder typeAggregation = AggregationBuilders.terms("agg_type").field("_type");

        DateHistogramBuilder dateTermsBuilder = AggregationBuilders.dateHistogram("agg_pubtime").field("pubtime");
        dateTermsBuilder.format("yyyy-MM-dd");
        dateTermsBuilder.interval(DateHistogram.Interval.days(1));

        dateTermsBuilder.subAggregation(typeAggregation);
        searchbuilder.addAggregation(dateTermsBuilder);


        SearchResponse sr = searchbuilder.execute().actionGet();
        Map<String, Aggregation> aggMap = sr.getAggregations().asMap();
        DateHistogram classTerms = (DateHistogram)aggMap.get("agg_pubtime");
        Iterator<org.elasticsearch.search.aggregations.bucket.histogram.DateHistogram.Bucket> classBucketIt = (Iterator<Bucket>) classTerms.getBuckets().iterator();
        List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();
        List<String[]> result = new ArrayList();
        while(classBucketIt.hasNext()){
            Map<String,Object> res = new HashMap<String, Object>();
            org.elasticsearch.search.aggregations.bucket.histogram.DateHistogram.Bucket classBucket = classBucketIt.next();
            //System.out.println("时间"+classBucket.getKey());
            StringTerms agg_type = (StringTerms) classBucket.getAggregations().asMap().get("agg_type");
            List<Terms.Bucket> buckets = (List<Terms.Bucket>) agg_type.getBuckets();
            List<String[]> list = new ArrayList<String[]>();
            for (Terms.Bucket bucket : buckets) {
                String[] str = new String[2];
                str[0] = bucket.getKey().trim();//日期
                str[1] = String.valueOf(bucket.getDocCount());//数量
//                list.add(str);
                //System.out.println( str[0]  +"======"   + str[1] );

               
            }

        }

参考:gpt文章来源地址https://www.toymoban.com/news/detail-648119.html

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.common.unit.TimeValue;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class AggregationExample {
    public static void main(String[] args) throws IOException {
        // 创建 Elasticsearch 客户端
        RestHighLevelClient client = createClient();

        // 创建聚合请求
        SearchRequest searchRequest = new SearchRequest("your_index_name");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // 设置查询条件
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());

        // 设置第一级聚合,按照 _type 字段进行聚合
        Terms.AggregationBuilder typeAggregation = AggregationBuilders.terms("by_type").field("_type");

        // 设置第二级聚合,按照时间进行聚合,这里使用日期直方图(Histogram)聚合
        Terms.BucketOrder termsOrder = Terms.BucketOrder.key(true);
        typeAggregation.subAggregation(
                AggregationBuilders.dateHistogram("by_time")
                        .field("your_time_field")
                        .dateHistogramInterval(DateHistogramInterval.DAY)
                        .subAggregation(AggregationBuilders.terms("top_hits").size(10).order(termsOrder))
        );

        // 添加聚合请求到搜索源中
        searchSourceBuilder.aggregation(typeAggregation);

        // 设置分页和超时时间
        searchSourceBuilder.size(0);
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        // 发起搜索请求并获取响应
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

        // 解析聚合结果
        Terms byTypeAggregation = searchResponse.getAggregations().get("by_type");
        for (Terms.Bucket typeBucket : byTypeAggregation.getBuckets()) {
            System.out.println("Type: " + typeBucket.getKeyAsString());

            Terms byTimeAggregation = typeBucket.getAggregations().get("by_time");
            for (Terms.Bucket timeBucket : byTimeAggregation.getBuckets()) {
                System.out.println("Time: " + timeBucket.getKeyAsString());
                
                Terms topHitsAggregation = timeBucket.getAggregations().get("top_hits");
                for (Terms.Bucket hitBucket : topHitsAggregation.getBuckets()) {
                    System.out.println("Hit: " + hitBucket.getKeyAsString());
                }
            }
        }

        // 关闭 Elasticsearch 客户端
        client.close();
    }

    private static RestHighLevelClient createClient() {
        // 创建和配置 Elasticsearch 客户端
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        return client;
    }
}

到了这里,关于es1.7.2 按照_type先聚合,再按照时间二次聚合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 实验篇(7.2) 15. 站对站安全隧道 - 多条隧道聚合(FortiGate-IPsec) ❀ 远程访问

    【简介】虽然隧道冗余可以解决连接问题,但是当大量数据访问或要求访问不能中断时,隧道冗余就力不从心了。这种情况就要用到隧道聚合。但是对宽带的要求也高了,双端都至少需要二条宽带。   实验要求与环境 OldMei集团深圳总部部署了域服务器和ERP服务器,用来对集

    2024年02月10日
    浏览(38)
  • ES度量聚合(ElasticSearch Metric Aggregations),Java开发自学教程

    .value( (new MultiValuesSourceFieldConfig.Builder()) .setFieldName(“num”) .setMissing(0) .build() ) .weight( (new MultiValuesSourceFieldConfig.Builder()) .setFieldName(“num”) .setMissing(1) .build() ) // .valueType(ValueType.LONG) ; avg.toString(); sourceBuilder.aggregation(avg); sourceBuilder.size(0); sourceBuilder.query( QueryBuilders.termQuery(“

    2024年04月14日
    浏览(65)
  • 实验篇(7.2) 16. 站对站安全隧道 - 通过聚合隧道走对方上网(FortiGate-IPsec) ❀ 远程访问

    【简介】前面所有实验基本上是由向导来完成的,只有隧道聚合实验是手动设置的。那么远程访问经常用到的走对方宽带上网功能,需要怎样手动配置呢?   实验要求与环境 OldMei集团深圳总部防火墙现在有三条宽带了,二条普通宽带用来上网及连接IPsec VPN,另一条MPLS专线用

    2024年02月09日
    浏览(48)
  • Java时间转换问题 [Failed to convert property value of type ‘java.lang.String‘ to required type ‘java.

    default message [Failed to convert property value of type ‘java.lang.String’ to required type \\\'java. 遇到java接收前端日期字符串返回到后端Date字段时报错。 通过在报错字段上添加@DateTimeFormat(pattern = “yyyy-MM-dd”)进行解决。 接下来是分析了引用一位博主的博客,我在简单总结一下: @JsonFormat注

    2024年02月13日
    浏览(40)
  • MongoDB 按照时间段查询某个物理机的CPU使用率,按照时间倒序排序,取出最新的5条数据

    1、连接MongoDB 1)如果 没有设置用户名密码 ,命令如下: 2)如果 设置了用户名密码 (比如: ceilometer / password ),命令如下: 2、连接数据库 其中,ceilometer 是需要使用的数据库名。 3、执行查询 查询SQL如下: 其中, meter 是性能表名, physical.cpu.utilization 是指标名, times

    2024年02月15日
    浏览(45)
  • Elasticsearch 查询全部数据,按照时间区间查询数据

    简介 在项目开发过程中需要从Elasticsearch中查询日志数据,下面介绍从Elasticsearch中查询索引全部数据,以及按照时间区间查询索引数据。 引入依赖 创建配置类 查询索引下的全部数据 按照时间区间查询索引数据

    2024年02月11日
    浏览(55)
  • ES:字符串排序,字符串按照数字排序

    对一个字符串类型的字段进行排序通常不准确,因为已经被分词成多个词条了 字段虽然是字符串,但是其实值是整数, 排序按照字符串转成整数排序 解决方式:对字段索引两次,一次索引分词(用于搜索),一次索引不分词(用于排序) 期望按照字符串排序, 不分词 期望按照

    2024年02月11日
    浏览(44)
  • 【实用】Mysql 按照时间(年月周日)维度统计,不存在时间数据 自动补充 0 数值

    ps: 网上看了一大堆文章, 介绍的东西真的是很够呛, 就没一个能真正用起来的, 各个都是自动补,然后很多都是不好用的。 我自己整理一篇,这是真能用。 本篇内容 : ① 按照 日 、周、月 、年  的维度 去对数据 做分组统计  ② 不存在的数据自动补充 0  (实用) 不

    2024年02月03日
    浏览(50)
  • C++/C按照时间命名保存bin文件

    在Linux应用编程过程中,使用C++或者C语言保存、读取bin文件是比较常见的需求。这里详细记录一下使用C++保存bin文件,也可以使用C语言实现。 C++/C语言保存bin文件函数,C++中也能使用 正确写入返回0,错误返回-1 针对文件路径的制作,文件露营时一个与时间有关的字符串 首先

    2024年02月08日
    浏览(35)
  • ffmpeg 拉取多路摄像头并按照时间参数截图

    1、拉取2路摄像头并存成图片: ffmpeg -r 1 -ss 00:00:05 -t 00:00:06   -i rtsp://admin:hisense2021@192.168.1.64:554/live0.264  -i rtsp://192.168.31.23/live_stream -map 0:v    image20.jpg -map 1:v   image21.jpg ffmpeg -r 1 -ss 00:00:05 -t 00:00:06   -i rtsp://admin:hisense2021@192.168.1.64:554/live0.264  -i rtsp://192.168.31.23/live_stream -m

    2024年02月03日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包