У меня есть эластичная база данных поиска:
{
"market": "NEW YORK",
"hour_time_stamp": "2019-08-24 01:00:00",
"model_year": 2014,
"num_devices": 28
},
{
"market": "COLUMBIA",
"hour_time_stamp": "2019-08-12 01:00:00",
"model_year": 2019,
"num_devices": 2
},
{
"market": null,
"hour_time_stamp": "2019-08-11 01:00:00",
"model_year": 2016,
"num_devices": 1
},
{
"hour_time_stamp": "2019-08-02 01:00:00",
"model_year": 2014,
"num_devices": 750
},
{
"market": "COLUMBIA",
"hour_time_stamp": "2019-07-12 01:00:00",
"model_year": 2018,
"num_devices": 21
}
Как видите, некоторые значения рынка равны нулю, а в некоторых случаях поле рынка отсутствует. Я написал следующий запросastic.js, чтобы получить рынок и выполнить агрегацию на нем:
let queryBody = ejs.Request()
.size(0)
.query(
ejs.BoolQuery()
.must(
ejs.RangeQuery('hour_time_stamp').gte(this.lastDeviceDate).lte(this.lastDeviceDate)
)
)
.agg(ejs.TermsAggregation('market_agg').field('market').order('sum', 'desc').size(50000)
.agg(ejs.SumAggregation('sum').field('num_devices'))
);
Мне нужны данные о названии рынка и сумме num_devices для этого рынка (поскольку рынок можно повторять),Написанный мною запрос возвращает только тот рынок, где определена рыночная стоимость. Мне нужно включить отсутствующий рынок, а также «рынок»: ноль в моем ведре. Есть идеи, как мне это сделать?