Преобразование эластичного поискового запроса + агрегатов в синтаксис вложенности - PullRequest
0 голосов
/ 07 апреля 2019

Мне нужно превратить следующий вложенный запрос и агрегаты, как написано в Kibana, в синтаксис c # nest.Основная проблема касается подгруппы «дата сбора урожая» (мне нужно установить ее на последние 3 месяца).но также не уверен, что сам запрос является лучшей практикой.

GET tdnetindex/_search
{
  "size": 0,
  "aggs": {
    "TermsAggregation": {
      "terms": {
        "field": "database",
        "size": 100
      },
      "aggs": {
        "DateHistogramAggregation": {
          "date_histogram": {
            "field": "harvest_date",
            "interval": "month"
          }
        }
      }
    }
  },
  "query": {
    "bool": {
      "filter": {
        "range": {
          "harvest_date": {
            "gte": "now-3M/M"
          }
        }
      }
    }
  }
}

То, что я до сих пор делал, было:

var query = elasticClient.Search<ElasticResponse>(s => s
                .Size(0)
                .Aggregations(a1 => a1
                    .Terms("TermsAggregation", t => t
                        .Field(f => f.DataBase)
                        .Size(100)
                        .Aggregations(a2 => a2
                            .DateHistogram("DateHistogramAggregation", dh => dh
                            .Field(f => f.HarvestDate)
                            .Interval(DateInterval.Month)
                            )
                        )
                    )
            )
            .Query(q => q
                .Bool(b => b
                    .Filter(f => f
                        .Range(r => r
                            .GreaterThanOrEquals(....);
                        )
                    )
                )
            )
           )

1 Ответ

0 голосов
/ 07 апреля 2019

Вы почти там, просто нужно использовать .DateRange(r => r...) вместо .Range(r => r...).

Для выражения DateMath вы можете использовать строку "now-3M/M" напрямую илиперевести на

DateMath.Now.Subtract("3M").RoundTo(DateMathTimeUnit.Month)
...