ElasticSearch EJS-запрос для извлечения отсутствующего поля - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть существующий запрос 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'))
      )

В настоящее время поле ('market') возвращает значения, в которых присутствуют данные для market.В базе данных также есть данные о пропущенных значениях для рынка, к которым мне нужно получить доступ.Как мне это сделать?

1 Ответ

0 голосов
/ 25 сентября 2019

В соответствии с вашей проблемой вам также нужен способ группировки пустых полей рынка.Так что для этого вы можете использовать параметр «отсутствующее» значение.Он определяет, как сгруппированные значения, которые отсутствуют (как в вашем случае).Таким образом, ваш запрос в форме 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'))
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...