学习笔记-ES 7.7.1 JavaAPI多条件数量查询、聚合查询

学习笔记-ES 7.7.1 JavaAPI多条件数量查询

@Test
    public void testTiaoSercha() throws IOException {
        //按索引查找
        SearchRequest searchRequest = new SearchRequest("lyry");

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        //使用布尔查询实现多条件查询
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

        //查询条件
        queryBuilder.must(QueryBuilders.matchQuery("cfd","运城市"));

        queryBuilder.must(QueryBuilders.matchQuery("mdd","唐山市"));

        //查询条数
        searchSourceBuilder.size(10000);

        //searchSourceBuilder 加入查询方法
        searchSourceBuilder.query(queryBuilder);

        //searchRequest 加入 searchSourceBuilder
        searchRequest.source(searchSourceBuilder);

        //客户端开始查询
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

        //查询到结果
        SearchHits hits = searchResponse.getHits();

        // 使用迭代器进行迭代
        Iterator<SearchHit> iterator = hits.iterator();

        //开始迭代
        while (iterator.hasNext()) {
            SearchHit searchHit = iterator.next(); // 每个查询对象

            System.out.println(searchHit.getSourceAsString()); // 获取字符串格式打印
        }

        //答应条数
        System.out.println(hits.getTotalHits());
    }

下面是聚合查询

  //计算个个分支的人数
    @Test
    public void testCountMan() throws IOException {

        CountRequest request=new CountRequest("lyry");

        SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();

        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("cfd", "运城市");

        searchSourceBuilder.query(matchQueryBuilder);

        request.source(searchSourceBuilder);

        CountResponse search = client.count(request, RequestOptions.DEFAULT);

        System.out.println("运城市出城人数:"+search.getCount());

    }

    //查询出行方式人数
    @Test
    public void testJvHeSelect() throws IOException {
       SearchRequest searchRequest =new SearchRequest("zdryyj");

       SearchSourceBuilder sourceBuilder=new SearchSourceBuilder();
        //设置超时时间
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("by_dtxx").field("dtxx");

        sourceBuilder.aggregation(termsAggregationBuilder);

        searchRequest.source(sourceBuilder);

        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);

        Aggregations aggregations = search.getAggregations();

        Map<String, Aggregation> stringAggregationMap = aggregations.asMap();
        //处理String类型的字段,以进行序列化
        ParsedStringTerms by_dtxx = (ParsedStringTerms)stringAggregationMap.get("by_dtxx");

        List<? extends Terms.Bucket> buckets = by_dtxx.getBuckets();

        //拿到总人数 ----Stream流求和
        long sum = buckets.stream().map(Terms.Bucket::getDocCount).reduce(Long::sum).get();

        BigDecimal count = new BigDecimal(sum);

        Map<String, Object> temp = new HashMap<>(2);;

        for (Terms.Bucket bucket : buckets) {
            //分类人数
            BigDecimal bigDecimal = new BigDecimal(bucket.getDocCount());
            temp.put("name", bucket.getKeyAsString());
            temp.put("count", bigDecimal);
            System.out.println("出行方式:"+temp.get("name")+"人数:"+temp.get("count"));
        }
        System.out.println("总人数"+count);
    }

    //航空出行对象总数
    @Test
    public void  testHangKong() throws IOException {
        SearchRequest searchRequest =new SearchRequest("hkgpxx");

        SearchSourceBuilder sourceBuilder=new SearchSourceBuilder();
        //设置超时时间
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("b1_guanlian").field("hbh");

        TermsAggregationBuilder termsAggregationBuilder1 = AggregationBuilders.terms("b2_guanlian").field("hbh");

        sourceBuilder.aggregation(termsAggregationBuilder.subAggregation(termsAggregationBuilder1));

        searchRequest.source(sourceBuilder);

        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);

        Aggregations aggregations = search.getAggregations();

        ParsedStringTerms b1_guanlian =(ParsedStringTerms) aggregations.getAsMap().get("b1_guanlian");

        List<? extends Terms.Bucket> buckets = b1_guanlian.getBuckets();

        for (Terms.Bucket bucket:buckets) {
            BigDecimal bigDecimal = new BigDecimal(bucket.getDocCount());

            Map<String, Object> temp = new HashMap<>(2);

            temp.put("name", bucket.getKey());
            System.out.println(temp.get("name"));

        }
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值