Невозможно получить объект от агрегации топ-хитов - PullRequest
0 голосов
/ 03 мая 2020

Я не могу получить объект из ответа в NEST от агрегации top_hits.

var searchRespJson = node.SearchForDataBool<JObject>(sourceOptions);
var dailyBuckets = searchRespJson.Aggregations.DateHistogram("daily").Buckets;
var topHits = dailyBuckets.Select(z => z.TopHits("lastresult").Hits<ObjExample>()).ToList();

Когда я хочу получить источник из topHits, он все еще равен нулю, как вы можете видеть ниже. Screenshot from debugging

Вот мой ответ от ES, как показано на скриншоте:

{
  "took": 14,
  "timed_out": false,
  "_shards": {
    "total": 95,
    "successful": 95,
    "failed": 0
  },
  "hits": {
    "total": 5,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "daily": {
      "buckets": [
        {
          "key_as_string": "2020-05-01T00:00:00.000Z",
          "key": 1588291200000,
          "doc_count": 4,
          "lastresult": {
            "hits": {
              "total": 4,
              "max_score": null,
              "hits": [
                {
                  "_index": "qa-reporting-2020-05",
                  "_type": "qa-reporting",
                  "_id": "49604317731477703817213013055855948409579155497894805506.0",
                  "_score": null,
                  "_source": {
                    "MetaData": {
                      "TestStatusStr": "Passed"
                    }
                  },
                  "sort": [
                    1588365938425
                  ]
                }
              ]
            }
          }
        }
      ]
    }
  }
}

Вот мой ObjExample:

public class MetaData
    {
        public string TestStatusStr { get; set; }
    }

    public class Source
    {
        public MetaData MetaData { get; set; }
    }

    public class Hit
    {
        public string _index { get; set; }
        public string _type { get; set; }
        public string _id { get; set; }
        public object _score { get; set; }
        public Source _source { get; set; }
        public IList<long> sort { get; set; }
    }

    public class ObjExample
    {
        public IList<Hit> hits { get; set; }
    }

Я sh чтобы добраться до Source-MetaData-TestStatusStr с помощью NEST. Есть идеи, что не так?

1 Ответ

0 голосов
/ 04 мая 2020

Наконец, я смог получить десериализованный объект, используя var topHits = dailyBuckets.Select(z => z.TopHits("lastresult").Documents<Source>()).ToList();, что соответствует правильному классу объекта для данного JSON ответа

...