赞
踩
- 使用ElasticsearchRepository的话可能会方便,但一些复杂的好像就没法做。
- 比如:高亮,聚合查询。
- 聚合查询,比如,mysql的group by..查商品有多少个种类等等...
- 还得用。ElasticsearchTemplate
- 使用spring boot 的话直接@Autowired注入就可以使用了
ElasticsearchTemplate使用聚合例子:
- NativeSearchQueryBuilder builder=new NativeSearchQueryBuilder();
- // -------- terms-分组.这个字段有多少种类的值
- ValuesSourceAggregationBuilder s=AggregationBuilders.terms("自定义").field("字段");
- builder.addAggregation(s);
- Aggregations aggregations= template.query(builder.build(), new ResultsExtractor<Aggregations>() {
- @Override
- public Aggregations extract(SearchResponse searchResponse) {
- return searchResponse.getAggregations();
- }
- });
- Map<String, Aggregation> stringAggregationMap=aggregations.asMap();
- System.out.println(stringAggregationMap.get("刚刚自定义的"));
执行结果:
- {"group_jxh":{"doc_count_error_upper_bound":0,"sum_other_doc_count":0,"buckets":[
- {"key":"哈哈","doc_count":2}, -->哈哈这个值有两个
- {"key":"吴彦祖","doc_count":1},
- {"key":"宋智孝","doc_count":1},
- {"key":"李光洙","doc_count":1},
- {"key":"江名才","doc_count":1},
- {"key":"江训亚","doc_count":1}
- ]}}
刚刚上面只是:trems的举例,还有一些方法:
- (1)统计某个字段的数量
- ValueCountBuilder vcb= AggregationBuilders.count("自定义").field("uid");
- (2)去重统计某个字段的数量(有少量误差)
- CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");
- (3)聚合过滤
- FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));
- (4)按某个字段分组
- TermsBuilder tb= AggregationBuilders.terms("group_name").field("name");
- (5)求和
- SumBuilder sumBuilder= AggregationBuilders.sum("sum_price").field("price");
- (6)求平均
- AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");
- (7)求最大值
- MaxBuilder mb= AggregationBuilders.max("max_price").field("price");
- (8)求最小值
- MinBuilder min= AggregationBuilders.min("min_price").field("price");
- (9)按日期间隔分组
- DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");
- (10)获取聚合里面的结果
- TopHitsBuilder thb= AggregationBuilders.topHits("top_result");
- (11)嵌套的聚合
- NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");
- (12)反转嵌套
- AggregationBuilders.reverseNested("res_negsted").path("kps ");

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。