maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
配置文件
spring:
data:
elasticsearch:
client:
reactive:
endpoints:
- es:9200
DSL实现
Java实现
@Autowired
ReactiveElasticsearchTemplate reactiveElasticsearchTemplate;
public Flux<org.elasticsearch.search.aggregations.Aggregation> getDrivingTrendModel(Search search) {
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termQuery("tenantId", search.getTenantId()));
boolQueryBuilder.filter(QueryBuilders.rangeQuery("ts").lte(Instant.now()));
nativeSearchQueryBuilder.withQuery(boolQueryBuilder);
DateHistogramAggregationBuilder dateHistogramAggregationBuilder = AggregationBuilders.dateHistogram("actions_per_day").field("ts").calendarInterval(DateHistogramInterval.DAY).format("yyyy-MM-dd");
CardinalityAggregationBuilder cardinalityAggregationBuilder = AggregationBuilders.cardinality("group_by_user").field("username.keyword");
dateHistogramAggregationBuilder.subAggregation(cardinalityAggregationBuilder);
nativeSearchQueryBuilder.addAggregation(dateHistogramAggregationBuilder);
return reactiveElasticsearchTemplate.aggregate(nativeSearchQueryBuilder.build(), org.elasticsearch.search.aggregations.Aggregation.class, IndexCoordinates.of("taurus-log.tauaction"));
}