(25)ElasticSearch java項目中聚合查詢terms、filter、filters、range、missing


  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();
   }


免責聲明!

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



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