我正在尝试按天汇总一些数据以制作一些图表,但datehistogram汇总仅返回空桶。
我的数据如下:
Date: July 2nd 2019, 12:08:50.647
_id: 4959287196855971761665003616
我的Nest请求:
DateTime now = DateTime.Now;
var descriptor = new SearchDescriptor<ModelWrapper>()
.Index("command-*")
.AllTypes()
.From(0)
.Size(100)
.Sort(s => s.Descending("Date"))
.Aggregations(a => a
.DateHistogram("daily", v => v
.Field(p => p.Date)
.Interval(DateInterval.Day)
.ExtendedBounds(now.AddMonths(-2), now)
))
当我在kibana控制台上发出请求时:
{
"aggs" : {
"daily" : {
"date_histogram" : {
"field" : "Date",
"interval" : "1D",
"extended_bounds": {
"min": "2019-06-02T12:01:02.123",
"max": "2019-07-02T12:01:02.123"
},
}
}
}
}
我得到了预期的结果。
我使用的是Nest 6.2和Elastic 6.2
答案 0 :(得分:0)
因此,经过一番摆弄之后,我使用了这段代码将我的SearchDescriptor序列化为发送的字符串:
var json = m_client.RequestResponseSerializer.SerializeToString(descriptor);
我得到了:
{
"aggs": {
"daily": {
"date_histogram": {
"extended_bounds": {
"max": "2019-07-02T16:25:57.522217",
"min": "2019-05-02T16:25:57.522217"
},
"field": "date",
"interval": "day"
}
}
},
"from": 0,
"size": 100,
"sort": [{
"Date": {
"order": "desc"
}
}]
}
这里的问题是我的字段使用小写字母,这是预期的行为(如here所示)。
解决方案是重写DefaultFieldNameInferrer,以完成此转换,并添加到我的连接设置中:
var settings = new ConnectionSettings(pool);
settings.DefaultFieldNameInferrer(p => p);
现在一切正常。
正如Russ Cam所指出的,我也可以将字符串传递给Field(),所以另一种解决方案是:
.Field(nameof(ModelWrapper.Date))