我需要将以下用Kibana编写的嵌套查询和聚合转换为c#嵌套语法。 主要问题是关于“收获日期”子聚合的(我需要将其设置为最近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(....);
)
)
)
)
)
答案 0 :(得分:0)
您几乎在那里,只需使用.DateRange(r => r...)
而不是.Range(r => r...)
。
对于DateMath表达式,您可以直接使用字符串"now-3M/M"
,或将其转换为
DateMath.Now.Subtract("3M").RoundTo(DateMathTimeUnit.Month)