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