Агрегат Datehistogram возвращает пустые сегменты - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь агрегировать некоторые данные по дням, чтобы составить некоторые диаграммы, но агрегирование гистограммы с данными возвращает только пустое ведро.

Мои данные выглядят так:

Date: July 2nd 2019, 12:08:50.647
_id: 4959287196855971761665003616

И мой запрос на гнездо:

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 голосов
/ 02 июля 2019

Так что после некоторой возни я использовал этот кусок кода, чтобы сериализовать мой 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"
        }
    }]
}

Проблема в том, чтомое поле помещено в нижний регистр, что является ожидаемым поведением (как указано здесь ).

Решение состоит в том, чтобы переопределить DefaultFieldNameInferrer, который выполняет это преобразование, для этого я добавил в свое соединениенастройки:

  var settings = new ConnectionSettings(pool);

  settings.DefaultFieldNameInferrer(p => p);

И теперь все работает как положено.

Редактировать:

Как отмечает Russ Cam Я также могу передать строкуField (), поэтому другое решение просто сделать:

  .Field(nameof(ModelWrapper.Date))
...