elasticsearch java操作的API

使用 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());
			}




猜你喜欢

转载自blog.csdn.net/zhangkang65/article/details/79154663