Как написать эквивалентный запрос в NEST, C # для date_histogram по неделям - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно преобразовать следующий запрос в c #, используя NEST.

"aggs": {
          "number_of_weeks": {
              "date_histogram": {
                    "field": "@timestamp",
                    "interval": "week"
                  }
                }
     }

в Кибане, результат будет

enter image description here

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

var query3 = EsClient.Search<doc>(q => q
                      .Index("SomeIndex")
                      .Size(0)
                      .Aggregations(agg => agg.DateHistogram("group_by_week", e => e.Field(p => p.timestamp) .Interval(DateInterval.Week)
                  )) ;
var resultquery3 = query3.Aggregations.DateHistogram("group_by_week");

в vs studio вывод enter image description here

1 Ответ

1 голос
/ 09 июля 2019

Проблема, вероятно, в том,

e => e.Field(p => p.timestamp)

не сериализуется в поле "@timestamp" в Elasticsearch. Чтобы это работало, вам нужно либо сопоставить это с атрибутом в POCO

public class Doc
{
    [Date(Name = "@timestamp")]
    public DateTime timestamp { get; set; }
}

или нанесите на карту ConnectionSettings

var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(pool)
    .DefaultMappingFor<Doc>(m => m
        .PropertyName(e => e.timestamp, "@timestamp")
    );

var client = new ElasticClient(settings);

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

.Field("@timestamp")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...