用于获取缺失字段的 ElasticSearch EJS 查询



我有一个现有的 ejs 查询,如下所示:

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', 'asc').size(50000)
.agg(ejs.SumAggregation('sum').field('num_devices'))
)

目前,字段('市场'(返回存在市场数据的值。数据库中也有市场缺失值的数据,我需要访问这些数据。我该怎么做?


编辑: ES 中的市场值为空或缺少字段。我编写了 ES 查询来获取所有这些字段,但我无法合并相同的 ejs 查询。知道这是怎么做到的吗?

{
"query": {
"bool": {
"should": [
{
"exists": {
"field": "market"
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "market"
}
}
]
}
}
]
}
}
}

根据您的问题,您还需要一种方法来对空的市场字段进行分组。 因此,您可以使用"缺失"值参数。它定义了缺失的值(如您的情况(的分组方式。因此,您以json形式查询将修改如下:-

{
"query":
{
"must": [
"range": {
"hour_time_stamp": {
"gte": lastDeviceDate,
"lte": lastDeviceDate
}
}
]
},
"aggs": {
"market_agg" : {
"market": {
"missing": "empty_markets",
"order": { "sum": "asc" }
}
},
"sum_agg": {
"sum" : { "field" : "num_devices" }
}
}
}

或者在您的代码中,可以通过添加缺少的参数来完成,如下所示。

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').missing('empty_markets').order('sum', 'asc').size(50000)
.agg(ejs.SumAggregation('sum').field('num_devices'))
)

最新更新