ElasticSearch日期直方图聚合填充缺失数据

ElasticSearch日期直方图聚合填充缺失数据,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我正在尝试使用ElasticSearch spring数据进行一些聚合 这是我的问题 final FilteredQueryBuilder filteredQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.andFilter(FilterBuilders.termFilter("gender", "F"), FilterBuilders.termFilter(

我正在尝试使用ElasticSearch spring数据进行一些聚合

这是我的问题

final FilteredQueryBuilder filteredQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
      FilterBuilders.andFilter(FilterBuilders.termFilter("gender", "F"),
      FilterBuilders.termFilter("place", "Arizona"),
      FilterBuilders.rangeFilter("dob").from(from).to(to)));

final MetricsAggregationBuilder<?> aggregateArtifactcount = AggregationBuilders.sum("delivery")
            .field("birth");

    final AggregationBuilder<?> dailyDateHistogarm =
       AggregationBuilders.dateHistogram(AggregationConstants.DAILY).field("dob")
        .interval(DateHistogram.Interval.DAY).subAggregation(aggregateArtifactcount);

    final SearchQuery query = new NativeSearchQueryBuilder().withIndices(index).withTypes(type)
        .withQuery(filteredQuery).addAggregation(dailyDateHistogarm).build();

    return elasticsearchTemplate.query(query, new DailyDeliveryAggregation());
final-FilteredQueryBuilder-filteredQuery=QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.andFilter(FilterBuilders.termFilter(“性别”、“F”),
FilterBuilders.termFilter(“地点”,“亚利桑那州”),
FilterBuilders.rangeFilter(“dob”).from(from.to(to));
最终度量值AggregationBuilder aggregateArtifactcount=AggregationBuilders.sum(“交付”)
.field(“出生”);
最终聚合生成器DailyDateHistorogarm=
AggregationBuilders.dateHistogram(AggregationConstants.DAILY).field(“dob”)
.时间间隔(日期直方图.时间间隔.日期).子聚集(aggregateArtifactcount);
final SearchQuery query=new NativeSearchQueryBuilder().WithIndex(索引)。withTypes(类型)
.withQuery(filteredQuery).addAggregation(DailyDateHistorogarm.build();
返回elasticsearchTemplate.query(query,newDailyDeliveryAggregation());
这也是我的聚合

        public class DailyDeliveryAggregation implements ResultsExtractor<List<DailyDeliverySum>> {

@SuppressWarnings("unchecked")
@Override
public List<DailyDeliverySum> extract(final SearchResponse response) {
    final List<DailyDeliverySum> dailyDeliverySum = new ArrayList<DailyDeliverySum>();
    final Aggregations aggregations = response.getAggregations();
    final DateHistogram daily = aggregations.get(AggregationConstants.DAILY);
    final List<DateHistogram.Bucket> buckets = (List<DateHistogram.Bucket>) daily.getBuckets();
    for (final DateHistogram.Bucket bucket : buckets) {
        final Sum sum = (Sum) bucket.getAggregations().getAsMap().get("delivery");
        final int deliverySum = (int) sum.getValue();
        final int delivery = (int) bucket.getDocCount();
        final String dateString = bucket.getKeyAsText().string();
        dailyDeliverySum.add(new DailyDeliverySum(deliverySum, delivery, dateString));
    }
    return dailyDeliverySum;
}
}
公共类DailyDeliveryAggregation实现ResultExtractor{
@抑制警告(“未选中”)
@凌驾
公共列表摘录(最终搜索响应){
最终列表dailyDeliverySum=new ArrayList();
最终聚合=response.getAggregations();
final DateHistogram daily=aggregations.get(AggregationConstants.daily);
最终列表bucket=(List)daily.getbucket();
用于(最终日期直方图。存储桶:存储桶){
final Sum=(Sum)bucket.getAggregations().getAsMap().get(“传递”);
final int deliverySum=(int)sum.getValue();
final int delivery=(int)bucket.getDocCount();
最终字符串dateString=bucket.getKeyAsText().String();
添加(新的dailyDeliverySum(deliverySum,delivery,dateString));
}
返回dailyDeliverySum;
}
}
它给了我正确的数据,但它不能满足我所有的需要 假设我查询的时间范围为10天,如果给定时间范围内没有日期的数据,则它在日期直方图存储桶中会错过该日期,但如果没有可用数据,我希望将0设置为聚合和单据计数的默认值

有什么方法可以做到这一点吗?

是的,您可以使用
date\u直方图
聚合的值并将其设置为0。这样,您还将获得不包含任何数据的存储桶:

final AggregationBuilder<?> dailyDateHistogarm =
   AggregationBuilders.dateHistogram(AggregationConstants.DAILY)
        .field("dob")        
        .minDocCount(0)                          <--- add this line
        .interval(DateHistogram.Interval.DAY)
        .subAggregation(aggregateArtifactcount);
final AggregationBuilder DailyDateHistorogarm=
AggregationBuilders.dateHistogram(AggregationConstants.DAILY)
.字段(“dob”)

.minDocCount(0)来自@Val的示例本身并不适用于我(我正在使用ElasticSearch 6.2.x的高级API)。不过,它的作用是告诉聚合应将缺少的值处理为0:

final AggregationBuilder<?> dailyDateHistogarm =
AggregationBuilders.dateHistogram(AggregationConstants.DAILY)
    .field("dob")        
    .minDocCount(0)                          
    .missing(0)
    .interval(DateHistogram.Interval.DAY)
    .subAggregation(aggregateArtifactcount);
final AggregationBuilder DailyDateHistorogarm=
AggregationBuilders.dateHistogram(AggregationConstants.DAILY)
.字段(“dob”)
.minDocCount(0)
。遗失(0)
.interval(日期直方图.interval.DAY)
.子集总(aggregateArtifactcount);

我需要添加.extendedBounds(from、to)和.minDocCount(0)以使其正常工作