Elasticsearch c # datetime получает значение по умолчанию для datetime - PullRequest
1 голос
/ 19 июня 2019

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

У меня есть значение метки времени, которое сохраняется следующим образом:

Timestamp = DateTime.UtcNow;

И свойство Timestamp выглядит так в моем объекте

public DateTime Timestamp { get; }

При использовании Kibana для просмотра данных отметка времени имеет следующее значение:

отметка времени: 19 июня 2019, 16: 29: 24.997

Когда я пытаюсь получить данные с помощью следующего кода:

var searchResponse = await elastic.SearchAsync<SupplierPricelistStatistic>(s => s
                .From(0)
                .Take(2000)
                .Query(q => +q
                    .Match(m => m
                        .Field(f => f.SupplierId)
                        .Query(id.ToString())
                    )
                )
                .Scroll("10m")
            ).ConfigureAwait(false);

И перебрать его так:

var resultList = new List<SupplierPricelistStatistic>();

        while (searchResponse.Documents.Any())
        {
            foreach (var doc in searchResponse.Hits)
            {
                resultList.Add(doc.Source);
            }
            searchResponse = await elastic.ScrollAsync<SupplierPricelistStatistic>("10m", searchResponse.ScrollId);
        }

Все моиметки времени имеют следующее значение:

{01-01-0001 00:00:00}

Глядя на отображение метки времени, оно выглядит следующим образом:

 "timestamp": {
          "type": "date"
        }

Я не могу понять, почему это происходит.Может быть, мне не хватает какой-то конфигурации?

РЕДАКТИРОВАТЬ:

По запросу:

Я использую NEST версии 6.6.0 иasticsearch 6.6.2

Полный метод сбора данных:

public async Task <List<SupplierPricelistStatistic>> GetSupplierPricelistStatistic(Guid id, IElasticClient elastic, int year, string month)
        {
            var searchResponse = await elastic.SearchAsync<SupplierPricelistStatistic>(s => s
                .From(0)
                .Take(2000)
                .Query(q => +q
                    .Match(m => m
                        .Field(f => f.SupplierId)
                        .Query(id.ToString())
                    )
                )
                .Scroll("10m")
            ).ConfigureAwait(false);

        var resultList = new List<SupplierPricelistStatistic>();

        while (searchResponse.Documents.Any())
        {
            foreach (var doc in searchResponse.Hits)
            {
                var tempSupStat = doc.Source;
                DateTime dateTime;
                if (month != "0")
                {
                    int.TryParse(month, out int intMonth);
                    dateTime = new DateTime(year, intMonth, DateTime.Now.Day);
                    if (tempSupStat.Timestamp.Year == dateTime.Year && tempSupStat.Timestamp.Month == dateTime.Month)
                    {
                        resultList.Add(tempSupStat);
                    }
                }
                else
                {
                    dateTime = new DateTime(year, DateTime.Now.Month, DateTime.Now.Day);
                    if (tempSupStat.Timestamp.Year == dateTime.Year)
                    {
                        resultList.Add(tempSupStat);
                    }
                }
            }
            searchResponse = await elastic.ScrollAsync<SupplierPricelistStatistic>("10m", searchResponse.ScrollId);
        }

        return resultList;
    }

1 Ответ

1 голос
/ 20 июня 2019

Так что я просто снова посмотрел на мою модель

public DateTime Timestamp { get; }

У него не было сеттера. Добавление одного исправило проблему.

...