通过java api访问Elasticsearch6.8中的数据


 所需的jar


<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.8.2</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.8.2</version>
        </dependency>


代码如下:

private static RestHighLevelClient client;
    PageList<Logfo> ls = new PageList<Logfo>();
    PageWrapper<Logfo>  pageWrapper= new PageWrapper<Logfo>();
    
    @Override
    public RestHighLevelClient getClient() {
        client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("192.10.1.141", 9200, "http"),
                        new HttpHost("192.10.1.143", 9200, "http")));
        return client;
    }

    @Override
    public void closeClient() {
        try {
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    //通过index、type,获取SearchRequest对象
    public SearchRequest getSearchRequest(String index,String type) {
        SearchRequest searchRequest = new SearchRequest(index);
        searchRequest.types(type);
        return searchRequest;
    }
    
    //将查询语句带入到SearchSourceBuilder中,并返回SearchRequest
    public SearchRequest getSearchRequest_QueryBuilder(SearchRequest searchRequest,QueryBuilder queryBuilder) {
        
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(queryBuilder); //设置查询对象。可以使任何类型的 QueryBuilder
        
        //使用from size进行分页查询(深度分页)
        sourceBuilder.from(0); //设置from选项,确定要开始搜索的结果索引。 默认为0。
        sourceBuilder.size(1000); //设置大小选项,确定要返回的搜索匹配数。 默认为10。
        
        //设置一个可选的超时时间,用于控制搜索允许的时间。
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));  
        
        sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
        
        //将请求体加入到请求中,将SearchSourceBuilder对象添加到搜索请求中:
        searchRequest.source(sourceBuilder);
        return searchRequest;
    }
    
    
    public QueryBuilder getQueryBuilder(Logfo logInfo) {
        QueryBuilder queryBuilder;
        if(null == (logInfo.getCamera_ip()) && null == logInfo.getDate_start()) {
            //无参数查询
            queryBuilder = QueryBuilders.matchAllQuery();
        }else {
            if(null == (logInfo.getCamera_ip()) && null != logInfo.getDate_start()) {
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                //带time范围参数查询
                QueryBuilder queryBuilder_date = null;
                try {
                    queryBuilder_date = QueryBuilders.rangeQuery("time")
                            .gte(format.parse(logInfo.getDate_start()))
                            .lte(format.parse(logInfo.getDate_end()));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                queryBuilder = QueryBuilders.boolQuery().must(queryBuilder_date);
            }else if(null != (logInfo.getCamera_ip()) && null == logInfo.getDate_start()){
                //带camera_ip参数查询
                QueryBuilder queryBuilder_ip = QueryBuilders.termQuery("camera_ip",logInfo.getCamera_ip());
                queryBuilder = QueryBuilders.boolQuery().must(queryBuilder_ip);
            }else {
                //带camera_ip参数查询
                //带time范围参数查询
                /*QueryBuilder  queryBuilder_date = QueryBuilders.rangeQuery("time")
                        .gte("2019-10-15 10:27:16")
                        .lte("2019-10-17 10:27:16");*/
                /*BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
                           .must(QueryBuilders.rangeQuery("time").gte(logInfo.getDate_start()));
                BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
                          .must(QueryBuilders.rangeQuery("time").lte(logInfo.getDate_end()));*/
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                QueryBuilder queryBuilder_date = null;
                try {
                    queryBuilder_date = QueryBuilders.rangeQuery("time")
                            .gte(format.parse(logInfo.getDate_start()))
                            .lte(format.parse(logInfo.getDate_end()));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                QueryBuilder queryBuilder_ip = QueryBuilders.termQuery("camera_ip",logInfo.getCamera_ip());
                queryBuilder = QueryBuilders.boolQuery().must(queryBuilder_ip).must(queryBuilder_date);
            }
        }
        return queryBuilder;
    }
    @Override
    public PageWrapper<Logfo> search_info(Logfo logInfo, Pageable pageable) {
        
        try (RestHighLevelClient client = this.getClient();) {
            
            SearchRequest searchRequest = this.getSearchRequest("logstash-order111", "order_log1111");
            
            //searchRequest = this.getSearchRequest_QueryBuilder(searchRequest, queryBuilder);
            //MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("coutent",coutent)
            //    .fuzziness(Fuzziness.AUTO); //模糊匹配
            QueryBuilder queryBuilder = this.getQueryBuilder(logInfo);
            
            SearchResponse searchResponse = client.search(this.getSearchRequest_QueryBuilder(searchRequest, queryBuilder), RequestOptions.DEFAULT);
            
            SearchHits hits = searchResponse.getHits();
            
            //System.out.println("查询结果有:" + hits.getTotalHits() + "条");
            
            SearchHit[] searchHits = hits.getHits();
                for (SearchHit hit : searchHits) {
                    String sourceAsString = hit.getSourceAsString(); //取成json串
                    /*JSONObject  jsonObject = JSONObject.fromObject(sourceAsString);//使用json-lib将json字符串转换为json对象
                    Logfo logInfo_ = (Logfo)JSONObject.toBean(jsonObject,Logfo.class);//生成pojo对象(简单java对象)
                    JSONObject jsonObj = new JSONObject(sourceAsString);
                    数据处理。。。。
                }

            数据处理。。。。
            }catch (IOException e) {
                e.printStackTrace();
            }finally {
                System.out.println("Closing elasticSearch client");
                if(client != null) {
                    this.closeClient();
                }
            }
        return pageWrapper;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值