日期直方图聚合 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))