es 时间字段聚合_Elasticsearch 聚合(aggregation)查询返回所有
Elasticsearch做查詢的時候,很多情況下,有一些查詢滿足不了我們的要求,這個時候,我們用Elasticsearch的聚合(aggregation)函數,下面講講aggregation的使用姿勢。{
"from": 0,
"size": 10,
"aggregations": {
"types": {
"terms": {
"field": "types"
}
}
}
}AggregationBuilder> aggregation = AggregationBuilders.terms("types").field("types");
SearchRequestBuilder srb = client.prepareSearch(BaseMapping.index);
srb.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
SearchResponse response = srb.execute().actionGet();
Aggregations agg = response.getAggregations();
Terms types = agg.get("types");
這樣都可以獲取到聚合數據。按照字段 types進行聚合查詢。這個時候返回是10條聚合數據。但是我想返回所有的呢?
我看了源碼,個人覺得比較坑。/**
* Sets the size - indicating how many term buckets should be returned (defaults to 10)
*/
public TermsBuilder size(int size) {
bucketCountThresholds.setRequiredSize(size);
return this;
}
這里說了,在后面加size可以指定返回條數,默認是10條。但是沒說明,我要全部的數據的size(0)的問題。
后來查詢資料,沒找到相關資料,問其他同學,得到結果,size(-1)or size(0)試試,結果我覺得-1的正確幾率大點,結果報錯,從錯誤來看,說size必須大于或者等于0,試試0,結果返回全部,也就是Global。得到如下寫法。{
"from": 0,
"size": 10,
"aggregations": {
"types": {
"terms": {
"field": "types",
"size": 0
}
}
}
}
Java API//設置一個叫types 聚合,聚合字段是types(這里可以多個),然后 size = 0 標示全局
AggregationBuilder> aggregation = AggregationBuilders.terms("types").field("types").size(0);
SearchRequestBuilder srb = client.prepareSearch(BaseMapping.index);
srb.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
SearchResponse response = srb.execute().actionGet();
Aggregations agg = response.getAggregations();
//取到聚合數據
Terms types = agg.get("types");
哦了!
如果本文對你有幫助,那么請你贊助我,讓我更有激情的寫下去,幫助更多的人。
¥我需要走的更遠,點擊我 贊助。
如果還有疑問,點擊我加群,為你提供最好的解答。
總結
以上是生活随笔為你收集整理的es 时间字段聚合_Elasticsearch 聚合(aggregation)查询返回所有的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 战狼1中吴京用的狙击枪叫啥
- 下一篇: layui停止更新_layui 关闭当前