Elasticsearch的聚合使用

本文介绍了如何利用Elasticsearch的聚合功能来实现类似于MySQL中的GROUP BY操作,针对一个属性字段进行分组去重查询。在实际操作中遇到错误,通过在字段后添加keyword解决该问题,参考了相关资料。
摘要由CSDN通过智能技术生成

功能:使用es的聚合做去重查询类似mysql的group by 的使用
比如:我想在es中查询数据通过一个属性字段分组

SearchRequestBuilder sbuilder = client.prepareSearch("test").setTypes("tt");
TermsAggregationBuilder tab= AggregationBuilders.terms("id_count ").field("id");
sbuilder.addAggregation(tab);
SearchResponse response = sbuilder.execute().actionGet();

但是报错了:

Caused by: NotSerializableExceptionWrapper[: Fielddata is disabled on text fields by default. Set fielddata=true on [id] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一个开源的搜索引擎,它提供了丰富的聚合功能。在Java使用Elasticsearch进行聚合查询,可以使用ElasticsearchJava API。聚合查询主要使用AggregationBuilders进行构建。可以用它来创建各种聚合查询,如桶,指标,嵌套聚合等。下面是一个简单的示例代码,用于按颜色分组获取每个卖出数量: ``` private RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200"))); @Test public void jh1() throws IOException { SearchRequest searchRequest = new SearchRequest("tvs"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.size(0); searchSourceBuilder.query(QueryBuilders.matchAllQuery()); TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("group_color").field("color"); searchSourceBuilder.aggregation(termsAggregationBuilder); searchRequest.source(searchSourceBuilder); SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT); Aggregations aggregations = response.getAggregations(); Terms group_color = aggregations.get("group_color"); List<? extends Terms.Bucket> buckets = group_color.getBuckets(); for (Terms.Bucket bucKey : buckets){ System.out.println(bucKey.getKeyAsString() + " == " + bucKey.getDocCount()); } } ``` 在这个示例中,我们首先创建了一个RestHighLevelClient客户端,然后创建了一个SearchRequest和SearchSourceBuilder对象。接下来,我们使用AggregationBuilders创建了一个terms聚合器,用于按颜色对文档进行分组,并将聚合器添加到SearchSourceBuilder对象中。然后,我们使用SearchRequest对象执行查询,并使用response.getAggregations()获取聚合结果。最后,我们对结果进行遍历并打印每个分组的键和文档数量。 --相关问题--:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值