ElasticSearch 与java的结合使用(二)

不同类型商品数量

java 复制代码
{
  "size": 0, 
  "aggs": {
    "type_group": {
      "terms": {
        "field": "type.keyword"
      }
    }
  }
}

  SearchRequest request = new SearchRequest();
        request.indices("product");
        // 按照类型分组统计数量
        AggregationBuilder type = AggregationBuilders
                .terms("type_group")
                .field("type.keyword");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.aggregation(type);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        List<Object> list = Lists.newArrayList();
        // 数据取出
        ParsedStringTerms typeGroup = response.getAggregations().get("type_group");
        for(Terms.Bucket bucket :  typeGroup.getBuckets()){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("key",bucket.getKey());
            jsonObject.put("count",bucket.getDocCount());
            list.add(jsonObject.toJSONString());
        }
        return list;

平均数,最大数统计

java 复制代码
{
  "size": 0,
  "aggs": {
    "pice_avg": {
      "avg": {
        "field": "pice"
      }
    },
    "max_pice": {
      "max": {
        "field": "pice"
      }
    }
  }
}
  SearchRequest request = new SearchRequest();
        request.indices("product");
        // 统计平均值
        AggregationBuilder piceAvg = AggregationBuilders
                .avg("pice_avg")
                .field("pice");
         // 统计最大值
        AggregationBuilder piceMax = AggregationBuilders
                .max("pice_max")
                .field("pice");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.aggregation(piceAvg).aggregation(piceMax);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        List<Object> list = Lists.newArrayList();
        // 数据取出
        ParsedAvg parsedAvg = response.getAggregations().get("pice_avg");
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("pice_avg",parsedAvg.getValue());
        ParsedMax parsedMax = response.getAggregations().get("pice_max");
        jsonObject.put("pice_max",parsedMax.getValue());
        list.add(jsonObject.toJSONString());
        return list;

统计不同类别的数量

java 复制代码
{
  "size": 0,
  "aggs": {
    "type_group": {
      "terms": {
        "field": "type.keyword"
      },
      "aggs": {
        "avg_pice": {
          "avg": {
            "field": "pice"
          }
        }
      }
    }
  }
}

 SearchRequest request = new SearchRequest();
        request.indices("product");
        // 按照类型分组统计数量
        AggregationBuilder typeGroup = AggregationBuilders
                .terms("type_group")
                .field("type.keyword");
        // 计算平均值
        AggregationBuilder piceAvg = AggregationBuilders
                .avg("pice_avg")
                .field("pice");
        typeGroup.subAggregation(piceAvg);
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.aggregation(typeGroup);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        List<Object> list = Lists.newArrayList();
        // 数据取出
        ParsedStringTerms parsedType = response.getAggregations().get("type_group");
        for(Terms.Bucket bucket :  parsedType.getBuckets()){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("key",bucket.getKey());
            jsonObject.put("count",bucket.getDocCount());
            ParsedAvg parsedAvg = bucket.getAggregations().get("pice_avg");
            jsonObject.put("pice_avg",parsedAvg.getValue());
            list.add(jsonObject.toJSONString());
        }
        return list;

根据日期按天统计,没有数据则0代替

java 复制代码
{
  "size": 0, 
  "aggs": {
    "create_time_histogram": {
      "date_histogram": {
        "field": "createtime",
        "calendar_interval": "month",
        "min_doc_count": 0,
        "format": "yyyy-MM", 
        "extended_bounds": {
          "min": "2020-01",
          "max": "2020-12"
        }
      }
    }
  }
}

 SearchRequest request = new SearchRequest();
        request.indices("product");
        // 设置世界范围
        LongBounds longBounds =new LongBounds("2020-01","2020-12");
        // 按照时间统计数据,间隔一天
        AggregationBuilder createtime = AggregationBuilders
                .dateHistogram("create_time_histogram")
                .field("createtime")
                .fixedInterval(DateHistogramInterval.DAY)
                .format("yyyy-MM")
                .minDocCount(0)
                .extendedBounds(longBounds);
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.aggregation(createtime);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        List<Object> list = Lists.newArrayList();
        // 数据取出
        Histogram parsedType = response.getAggregations().get("create_time_histogram");
        for(Histogram.Bucket bucket :  parsedType.getBuckets()){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("key",bucket.getKeyAsString());
            jsonObject.put("count",bucket.getDocCount());
            list.add(jsonObject.toJSONString());
        }
        return list;

前缀搜索

java 复制代码
{
  "query": {
    "prefix": {
      "name": {
        "value": "小米"
      }
    }
  }
}

 SearchRequest request = new SearchRequest();
        request.indices("product");
        // 前缀查询
        QueryBuilder queryBuilder = QueryBuilders.prefixQuery("name","小米");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.query(queryBuilder);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        List<Object> list = Lists.newArrayList();
        // 数据取出
        SearchHit[] hits = response.getHits().getHits();
        return Arrays.stream(hits).map(h -> h.getSourceAsString()).collect(Collectors.toList());
相关推荐
Elasticsearch18 小时前
如何通过 Claude Code 来写入 CSV 数据到 Elasticsearch
elasticsearch
大志哥1233 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
TableRow3 天前
参数化搜索的实现原理:从多维索引到查询优化
elasticsearch·全文检索
醉颜凉3 天前
Elasticsearch高性能优化:Bulk API大规模数据导入性能调优全攻略
elasticsearch·性能优化·jenkins
Ysouy3 天前
Spring Data Elasticsearch 全流程学习教程
java·spring·elasticsearch
沪飘大军3 天前
goldRush-专门分析黄金的投资理财agent
java·开发语言·elasticsearch
让学习成为一种生活方式3 天前
samblaster v.0.1.26安装与使用--生信工具096
大数据·elasticsearch·搜索引擎
小马爱打代码3 天前
Elasticsearch 容器化部署(单机版):从零搭建你的搜索和分析引擎
elasticsearch
西敏寺的乐章3 天前
排序三阶段:粗排→精排→重排,把业务信号灌进 ES 排序管道
elasticsearch·搜索引擎
小马爱打代码3 天前
Elasticsearch 集群容器化部署:构建 PB 级搜索与分析平台
大数据·elasticsearch·搜索引擎