es java distinct_用elasticsearch聚合函数实现distinct查询

1.等价的sql

Sql代码 :

SELECT DISTINCT field1,field2 FROM test_index.test_type

等价于

Sql代码:

SELECT field1,field2 FROM test_index.test_type GROUP BY field1,field2

Controller:

这是根据类型和传过来的可变字段key来查询

/**

* 布局管理-聚合查询

* @param logType

* @return

*/

@Override

@GetMapping("/logs/layout/manager")

public Map queryLayout(@RequestParam(required = false) String logType, @RequestParam(required = false) String modifiableKey){

Map map = new HashMap<>();

if (modifiableKey != null) {

// List modifiableKeyList = Arrays.asList(modifiableKeys.split(","));//用逗号隔开

// for (String modifiableKey : modifiableKeyList) {

// }

List operationRecords = appleAppOperationLogService.queryLayout(logType, modifiableKey);

map.put(modifiableKey, operationRecords);

}

return map;

}

Service:

/**

* 根据logType查询modifiableKey 不重复

* @param logType

* @return

*/

@Override

public List queryLayout(String logType, String modifiableKey) {

List list = new ArrayList();

//聚合

TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("modifiableKey").field(modifiableKey+".keyword");

SearchRequest searchRequest = new SearchRequest(INDEX);

searchRequest.types(TYPE);

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

boolQueryBuilder.must(QueryBuilders.matchAllQuery());//查询所有 此处为匹配所有文档

//elasticsearch 里默认的IK分词器是会将每一个中文都进行了分词的切割,所以你直接想查一整个词 加上.keyword

boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("logType.keyword", logType));

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();// 1.创建并设置SearchSourceBuilder对象

sourceBuilder.query(boolQueryBuilder);

sourceBuilder.aggregation(aggregationBuilder);//聚合查询

searchRequest.source(sourceBuilder);

try {

SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

Aggregations aggregations = searchResponse.getAggregations();

Aggregation tags = aggregations.asMap().get("modifiableKey");

Terms teamSum= (Terms)tags;

List extends Terms.Bucket> buckets = teamSum.getBuckets();

for (Terms.Bucket bucket : buckets) {

list.add(bucket.getKeyAsString());

}

} catch (IOException e) {

log.error(e.getMessage(), e);

}

return list;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值