zoukankan      html  css  js  c++  java
  • Java ES api 查询例子

    1、demo

        public void test(){
            //用过设置es服务的ip,端口号和协议建立es客户端工厂
            RestClientBuilder builder = RestClient.builder(new HttpHost("10.50.31.110", 9200, "http"));
            //建立客户端
            RestHighLevelClient client = new RestHighLevelClient(builder);
            //设置es的索引index和类型他type
            SearchRequest searchRequest = new SearchRequest("data_node");
            searchRequest.types("data_node");
            //查询工厂
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            
            //bool工厂,相当于sql中where条件,where之后的条件都写在这里
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
            //queryBuilder.should方法是或的逻辑,满足一个,queryBuilder.must是必须满足
            queryBuilder.should(QueryBuilders.termQuery("data.name", "014"));
            //将where条件放入工厂
            searchSourceBuilder.query(queryBuilder);
            
            //聚合工厂,相当于sql中的group by,如果es数据中是对象包含对象,就如下写法,以下就是以data对象中的name作为分组
            AggregationBuilder termsBuilder = AggregationBuilders.terms("by_data.name").field("data.name");
            //将聚合条件放入工厂
            searchSourceBuilder.aggregation(termsBuilder);
            searchRequest.source(searchSourceBuilder);
            SearchResponse searchResponse = null;
            try {
                //执行请求
                searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //返回查询聚合后的结果,处理
            Aggregations terms= searchResponse.getAggregations();
            for (Aggregation a:terms){
                ParsedTerms parsedTerms = (ParsedTerms) a;
                for (Terms.Bucket bucket : parsedTerms.getBuckets()) {
                    log.info(bucket.getKeyAsString() + "   " + bucket.getDocCount());
                }
            }
            //返回查询到的具体数据
           SearchHits searchHits = searchResponse.getHits();
           for (SearchHit hit : searchHits.getHits()) {
               log.info(hit.getSourceAsString());
           }
        }

    2、范围查询

    /**
         * 查询时间范围内所有接口调用次数
         * @param index
         * @param type
         * @param startTime
         * @param endTime
         * @return
         * @throws IOException
         */
        public SearchHits getCountByTimeRange(String index, String type, Long startTime, Long endTime) throws IOException {
            SearchRequest request = new SearchRequest(index);
            request.types(type);
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    
            queryBuilder.must(QueryBuilders.rangeQuery("data.requestTime").gt(startTime).lt(endTime));
            searchSourceBuilder.query(queryBuilder);
    
            request.source(searchSourceBuilder);
            SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
            SearchHits searchHits = searchResponse.getHits();
            return searchHits;
        }

    3、聚合设置过滤条件

    /**
         * 聚合中设置过滤条件
         * @param index
         * @param type
         * @param startTime
         * @param endTime
         * @return
         */
        public Aggregations getOnDayInvokeAndError(String index, String type, Long startTime, Long endTime, Integer from, Integer size) throws Exception{
            SearchRequest request = new SearchRequest(index);
            request.types(type);
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    
            queryBuilder.must(QueryBuilders.rangeQuery("data.requestTime").gt(startTime).lt(endTime))
            .must(QueryBuilders.termQuery("resource.logsource", "qqzx"));
            searchSourceBuilder.query(queryBuilder);
            //以interfaceCode分组,取interfaceName作为别名
            AggregationBuilder termsBuilder = AggregationBuilders.terms("by_data.interfaceCode").field("data.interfaceCode").field("resource.interfaceName");
            //设置过滤条件
            AggregationBuilder filter = AggregationBuilders.filter("当日异常数量", QueryBuilders.boolQuery().must(QueryBuilders.termQuery("resource.status", "1")));
            termsBuilder.subAggregation(filter);
            searchSourceBuilder.aggregation(termsBuilder).from(from).size(size);
    
            request.source(searchSourceBuilder);
            SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
            return searchResponse.getAggregations();
        }

    4、设置需要查询的字段和排除的字段

    /**
         * 
         * @param index
         * @param type
         * @param startTime
         * @param endTime
         * @return
         * @throws Exception
         */
        public Set<String> getActiveInterfaceNotRegister(String index, String type, Long startTime, Long endTime, Page page) throws Exception {
            SearchRequest request = new SearchRequest(index);
            request.types(type);
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    
            queryBuilder.must(QueryBuilders.rangeQuery("data.requestTime").gt(startTime).lt(endTime));
            AggregationBuilder termsBuilder = AggregationBuilders.terms("by_data.interfaceCode").field("data.interfaceCode");
            searchSourceBuilder.aggregation(termsBuilder);
         //fetchSource中设置需要查询字段和排除字段 searchSourceBuilder.query(queryBuilder).fetchSource(
    "data.interfaceCode", null).from(page.getOffset()).size(page.getLimit()); request.source(searchSourceBuilder); SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT); SearchHit[] hits = searchResponse.getHits().getHits(); Set<String> result = new HashSet<>(); for (SearchHit hit : hits) { String sourceAsString = hit.getSourceAsString(); JSONObject jsonObject = JSONObject.parseObject(sourceAsString); JSONObject data = jsonObject.getJSONObject("data"); result.add(data.getString("interfaceCode")); } return result; }
  • 相关阅读:
    docker 的使用
    WEB应用支持RESTFUL风格方法
    tomcat7 安装 windows 服务
    获取POM.XML依赖的JAR包
    集成 dubbo 微服务
    linux 修改yum 为阿里云源
    poj3904
    2013 ACM/ICPC 长春网络赛E题
    2013 ACM/ICPC 长春网络赛F题
    2013 ACM/ICPC 长沙网络赛J题
  • 原文地址:https://www.cnblogs.com/liuzhengkun/p/13360470.html
Copyright © 2011-2022 走看看