Datehistogram聚合返回空存储桶

时间:2019-07-02 10:31:40

标签: c# elasticsearch nest

我正在尝试按天汇总一些数据以制作一些图表,但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

1 个答案:

答案 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))