日期直方图聚合 returns 个空桶
Datehistogram aggregate returns empty buckets
我正在尝试按天汇总一些数据以制作一些图表,但日期直方图汇总 return 只有空桶。
我的数据如下:
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
所以经过一些摆弄之后,我使用这段代码将我的 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))
我正在尝试按天汇总一些数据以制作一些图表,但日期直方图汇总 return 只有空桶。
我的数据如下:
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
所以经过一些摆弄之后,我使用这段代码将我的 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))