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<String, Object> map = new HashMap<>();
if (modifiableKey != null) {
// List<String> 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;
}
還想了解更多的話,轉到這裏:https://blog.csdn.net/jsiostream/article/details/87272784 註解很詳細