1、按年齡分組,查詢每組的個數
@Test public void testTerms() throws IOException, InterruptedException, ExecutionException { //指定集群 Settings settings = Settings.builder().put("cluster.name","my-application").build(); //創建客戶端 TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.43.151"),9300)); //創建查詢對象,按年齡分組,查詢每組的個數 AggregationBuilder agg = AggregationBuilders.terms("terms").field("age"); //執行查詢 SearchResponse sr = client.prepareSearch("lib3") .addAggregation(agg) .execute() .actionGet(); //獲取結果 Terms terms = sr.getAggregations().get("terms"); //遍歷 for(Terms.Bucket entry:terms.getBuckets()) { System.out.println(entry.getKey()+"----------"+entry.getDocCount()); } client.close(); }
2、過濾查詢age字段是20的文檔
@Test public void testFilter() throws IOException, InterruptedException, ExecutionException { //指定集群 Settings settings = Settings.builder().put("cluster.name","my-application").build(); //創建客戶端 TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.43.151"),9300)); //指定查詢條件,age字段是20的 QueryBuilder query = QueryBuilders.termQuery("age", 29); //過濾查詢條件,過濾出滿足查詢條件的文檔 AggregationBuilder agg = AggregationBuilders.filter("filter", query); //執行查詢 SearchResponse sr = client.prepareSearch("lib3") .addAggregation(agg) .execute() .actionGet(); //獲取結果 Filter filter = sr.getAggregations().get("filter"); //輸出個數 System.out.println(filter.getDocCount()); client.close(); }
3、過濾查詢interests字段包含changge、hejiu的文檔
@Test public void testFilters() throws IOException, InterruptedException, ExecutionException { //指定集群 Settings settings = Settings.builder().put("cluster.name","my-application").build(); //創建客戶端 TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.43.151"),9300)); //指定查詢條件,interests字段包含changge的 QueryBuilder query = QueryBuilders.termQuery("interests", "changge"); //指定查詢條件,interests字段包含hejiu的 QueryBuilder query2 = QueryBuilders.termQuery("interests", "hejiu"); //過濾查詢條件,過濾出滿足query或者query2的文檔 AggregationBuilder agg = AggregationBuilders.filters("filters", new FiltersAggregator.KeyedFilter("條件1",query), new FiltersAggregator.KeyedFilter("條件2",query2)); //執行查詢 SearchResponse sr = client.prepareSearch("lib3") .addAggregation(agg) .execute() .actionGet(); //獲取結果 Filters filters = sr.getAggregations().get("filters"); //遍歷,指定了兩個filter,所以輸出兩條數據,key分別是條件1、條件2 for(Filters.Bucket entry:filters.getBuckets()) { System.out.println(entry.getKey()+"----------"+entry.getDocCount()); } client.close(); }
4、分別統計年齡小於50的,25到50之間的,大於25的文檔個數
@Test public void testRange() throws IOException, InterruptedException, ExecutionException { //指定集群 Settings settings = Settings.builder().put("cluster.name","my-application").build(); //創建客戶端 TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.43.151"),9300)); //統計3組數據年齡小於50的,25到50之間的,大於25的 AggregationBuilder agg = AggregationBuilders.range("range") .field("age") .addUnboundedTo(50)//( ,to) .addRange(25,50)//[from,to) .addUnboundedFrom(25);//[from, ) //執行查詢 SearchResponse sr = client.prepareSearch("lib3") .addAggregation(agg) .execute() .actionGet(); //獲取結果 Range r = sr.getAggregations().get("range"); //遍歷,輸出3個key,*-50.0;25.0-50.0;25.0-* for(Range.Bucket entry:r.getBuckets()) { System.out.println(entry.getKey()+"----------"+entry.getDocCount()); } client.close(); }
5、統計缺失age字段的文檔個數
@Test public void testMissing() throws IOException, InterruptedException, ExecutionException { //指定集群 Settings settings = Settings.builder().put("cluster.name","my-application").build(); //創建客戶端 TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.43.151"),9300)); //統計缺失字段age的文檔 AggregationBuilder agg = AggregationBuilders.missing("missing").field("age"); //執行查詢 SearchResponse sr = client.prepareSearch("lib3") .addAggregation(agg) .execute() .actionGet(); //獲取結果 Aggregation aggregation = sr.getAggregations().get("missing"); //輸出結果 System.out.println(aggregation.toString()); client.close(); }