Я пытаюсь подсчитать оценку, используя агрегации Elasticsearch. В настоящее время я получаю диапазон для двух разных интервалов нажатия клавиш. Затем я делаю серию субагрегаций следующим образом:
const npsFilterQuery = queryHelper.createTermQuery('metric_type', npsTypes);
const npsFilterAgg = aggregationHelper.createFilterAggregation('nps_filter', npsFilterQuery)
.subAggregation(aggregationHelper.createTermsAggregation('nps_types', 'metric_type.raw', 5000))
.subAggregation(aggregationHelper.createRangeAggregation('nps_value_buckets', 'value', true,
[{ 'key': 'Detractors', 'from': 0, 'to': 7 }, { 'key': 'Promoters', 'from': 9, 'to': 11 }]))
.subAggregation(aggregationHelper.createBucketSumAggregation('nps_bucket_sum', 'nps_value_buckets._count'))
.subAggregation(aggregationHelper.createBucketSelectorAggregation('promoter_bucket', 'key', '_key', 'Promoters'))
.subAggregation(aggregationHelper.createBucketSelectorAggregation('dectractor_bucket', 'key', '_key', 'Detractors'))
.subAggregation(aggregationHelper.createBucketSumAggregation('promoter_bucket_sum', 'promoter_bucket._count'))
.subAggregation(aggregationHelper.createBucketSumAggregation('detractor_bucket_sum', 'detractor_bucket._count'))
.subAggregation(aggregationHelper.createBucketPercentageScript('promoter_percent',
'nps_score>promoter_bucket_sum', 'nps_score>nps_bucket_sum'))
.subAggregation(aggregationHelper.createBucketPercentageScript('detractor_percent',
'nps_score>detractor_bucket_sum', 'nps_score>nps_bucket_sum'))
.subAggregation(aggregationHelper.createBucketDifferenceScript('nps_score', 'promoter_percent', 'detractor_percent'));
У меня возникают проблемы с возможностью вернуть только 'nps_score' из BucketDifferenceScript. У кого-нибудь есть понимание? Я могу предоставить более подробную информацию, если это необходимо.