elasticsearch筆記(8)聚合查詢


聚合查詢: 也就是類似mysql的count,max,avg等查詢,但要更為強大

聚合查詢語法

POST /index/type/_search
{
    "aggs":{ "名字":{ "agg_type":{ "屬性":"值" } } } }

一.  去重計數查詢:Cardinality

去掉重復的數據,然后算出總數,也就是Cardinality; 如查詢總共幾個省.

 

 

 java 中的重復計數查詢

 1 //重復計數查詢
 2     @Test
 3     public void cardinalityQuery() throws IOException {
 4         //        1. 創建查詢對象
 5         String index = "sms-logs-index";
 6         String type = "sms-logs-type";
 7         SearchRequest searchRequest = new SearchRequest(index);//指定索引
 8         searchRequest.types(type);//指定類型
 9 //    2. 封裝查詢條件
10         String aggName = "agg";
11         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
12         searchSourceBuilder.aggregation(AggregationBuilders.cardinality(aggName).field("province"));
13         searchRequest.source(searchSourceBuilder);
14 
15         //        3.執行查詢
16         // client執行
17         HttpHost httpHost = new HttpHost("192.168.43.30", 9200);
18         RestClientBuilder restClientBuilder = RestClient.builder(httpHost);
19         RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
20         SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
21 
22 //        4.獲取數據(source中的數據)
23         Cardinality aggregation = search.getAggregations().get(aggName); //用Cardinality接收
24         System.out.println(aggregation.getValue());
25     }

 二. 范圍統計

根據某個屬性的范圍,統計文檔的個數,(from 包含, to不包含)

針對不同的類型指定不同的方法,

數值:range

時間:date_range

ip:ip_range

數值統計:

 

日期型范圍查詢(data_range):加一個format來規定格式

 

 

 ip范圍統計(ip_range)

 

 

 

java中用range查詢

 1     @Test
 2     public void rangeQuery() throws IOException {
 3         //        1. 創建查詢對象
 4         String index = "sms-logs-index";
 5         String type = "sms-logs-type";
 6         SearchRequest searchRequest = new SearchRequest(index);//指定索引
 7         searchRequest.types(type);//指定類型
 8 //    2. 封裝查詢條件
 9         String aggName = "agg";
10         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
11         searchSourceBuilder.aggregation(AggregationBuilders.range(aggName).field("fee").addUnboundedTo(3)
12                 .addRange(3,4)
13                 .addUnboundedFrom(4));
14         searchRequest.source(searchSourceBuilder);
15 
16         //        3.執行查詢
17         // client執行
18         HttpHost httpHost = new HttpHost("192.168.43.30", 9200);
19         RestClientBuilder restClientBuilder = RestClient.builder(httpHost);
20         RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
21         SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
22 
23 //        4.獲取數據(source中的數據)
24         Range range = search.getAggregations().get(aggName);//用Range接收
25         List<? extends Range.Bucket> buckets = range.getBuckets();
26         for(  Range.Bucket bucket : buckets ){
27             System.out.println(bucket.getDocCount());
28 
29         }
30 
31 
32     }

 3. 統計聚合查詢

可以查詢屬性(field)的最大值,最小值,平均值,平方和.......

 

 

 1   @Test
 2     public void extended_status_Query() throws IOException {
 3         //        1. 創建查詢對象
 4         String index = "sms-logs-index";
 5         String type = "sms-logs-type";
 6         SearchRequest searchRequest = new SearchRequest(index);//指定索引
 7         searchRequest.types(type);//指定類型
 8 //    2. 封裝查詢條件
 9         String aggName = "agg";
10         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
11         searchSourceBuilder.aggregation(AggregationBuilders.extendedStats(aggName).field("fee"));
12         searchRequest.source(searchSourceBuilder);
13 
14         //        3.執行查詢
15         // client執行
16         HttpHost httpHost = new HttpHost("192.168.43.30", 9200);
17         RestClientBuilder restClientBuilder = RestClient.builder(httpHost);
18         RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
19         SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
20 
21 //        4.獲取數據(source中的數據)
22         ExtendedStats aggregation = search.getAggregations().get(aggName);//用Range接收
23         System.out.println(aggregation.getMax());
24         System.out.println(aggregation.getSum());
25         System.out.println(aggregation.getAvg());
26     }

 

https://www.elastic.co/guide/en/elasticsearch/reference/6.5/getting-started.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM