使用 java查询elasticsearch的时候常用的语句集合:
新建查询:
Settings settings = Settings.builder().put(properties).build(); settings.setIndicesOptions(IndicesOptions.fromOptions(true, true, false, false)); TransportClient client = new PreBuiltTransportClient(settings); List<String> indexs ={"indexName"}; client.prepareSearch(indexs.toArray(new String[indexs.size()]));
查询条件:
(1)根据某个字段查询
queryBuilder.filter(QueryBuilders.termsQuery("bType", bTypes)); queryBuilder.filter(QueryBuilders.termQuery(key, value));
( 2 )根据时间段查询
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() .filter(QueryBuilders.rangeQuery(STARTTIME).from(startTime).to(endTime))
(3)模糊查询
queryBuilder.filter(QueryBuilders.wildcardQuery(key, '*' + value + '*'));
(4) 前缀查询
queryBuilder.filter(QueryBuilders.prefixQuery(TYPE, typeValue));
聚合条件:
(1)根据某个字段进行聚合
TermsAggregationBuilder aggBuilder=AggregationBuilders.terms(AggAlias.CATEGORY.getValue()).field("messageId"); aggBuilder.size(MAX_AGG_SIZE);(2)时间直方图
DateHistogramAggregationBuilder aggBuilder=AggregationBuilders.dateHistogram(AggAlias.CNT.getValue()).minDocCount(0L).timeZone(DateTimeZone.getDefault()).field(dateFieldName).format("epoch_millis").interval(interval).extendedBounds(new ExtendedBounds(startTime,endTime));
(3)聚合子聚合
termsAggBuilder.subAggregation(new AggregationBuilderHelper().builderStaticsAgg(staticsFieldName, aggType)).size(20);
(4)排序,数量条件
termsAggBuilder.order(Terms.Order.aggregation(orderColumn,asc)).size(5);
(5) 使用脚本
Map<String,Object> thresholdParams=new HashMap<String,Object>(); thresholdParams.put("threshold",threshold); Script apdexScript=new Script(ScriptType.INLINE,"painless","def responseTemp=doc['durationInMillis'].value; if(responseTemp>params.threshold){return 0.5;}else{return 1;}",thresholdParams); Script errorScript=new Script(ScriptType.INLINE,"painless","def errorTemp=doc['status'].value; if(errorTemp=='0'){return 0;}else{return 1;}",new HashMap<String,Object>()); Script errorRateScript=new Script(ScriptType.INLINE,"painless","def errorTemp=doc['status'].value; if(errorTemp=='0'){return 1;}else{return 0;}",new HashMap<String,Object>()); if(!"".equals(orderStr)) { return AggregationBuilders.terms(AggAlias.CATEGORY.getValue()).field(categoryfieldName).order(Terms.Order.aggregation(orderStr,ascOrder)).size(size) .subAggregation(AggregationBuilders.extendedStats("responseTime").field("durationInMillis")) .subAggregation(AggregationBuilders.sum("error").script(errorScript)) .subAggregation(AggregationBuilders.avg("apdex").script(apdexScript)) .subAggregation(AggregationBuilders.percentileRanks("errorRate").values(0).script(errorRateScript)); }else { return AggregationBuilders.terms(AggAlias.CATEGORY.getValue()).field(categoryfieldName).size(size) .subAggregation(AggregationBuilders.extendedStats("responseTime").field("durationInMillis")) .subAggregation(AggregationBuilders.sum("error").script(errorScript)) .subAggregation(AggregationBuilders.avg("apdex").script(apdexScript)) .subAggregation(AggregationBuilders.percentileRanks("errorRate").values(0).script(errorRateScript)); }
查询结果:
SearchResponse rs = srb.execute().get(); SearchHit[] searchHits=rs.getHits().getHits(); for(SearchHit hit:searchHits){ Map<String,Object> sourceMap=hit.getSource(); try { sourceMap.get("messsageId"); } catch (Exception e) { e.printStackTrace(); } }聚合结果:
(1)时间直方图聚合:
InternalDateHistogram dateHistogram = rs.getAggregations().get(AggAlias.CNT.getValue()); for (Histogram.Bucket dateBucket : dateHistogram.getBuckets()) { List<CategoryStatics> staticsList = new ArrayList<CategoryStatics>(); Terms terms = dateBucket.getAggregations().get(AggAlias.CATEGORY.getValue()); for (Terms.Bucket termsBuck : terms.getBuckets()) { CategoryStatics statistics = new CategoryStatics(); statistics.setName(termsBuck.getKeyAsString()); statistics.setCount(termsBuck.getDocCount()); statistics.setDateTime((DateTime) dateBucket.getKey()); staticsList.add(statistics); } resultMap.put((DateTime) dateBucket.getKey(), staticsList); }(2)根据字段分类聚合:
Terms subUrlTerms=rs.getAggregations().get(AggAlias.CATEGORY.getValue()); List<Bucket> subBucketList=subUrlTerms.getBuckets(); for(Bucket subbucket:subBucketList){ System.out.println(subbucket.getKeyAsString()); }