Как выполнить субагрегацию с использованием NEST? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь выполнить групповые документы по определенным критериям с агрегацией сегментов и выполнить агрегирование сумм для каждого сегмента.

Ниже моя попытка

ISearchResponse<PaymentReportModel> paymentSearchResponse =
                ConnectionToES.EsClient()
                .Search<PaymentReportModel>
                (s => s
                    .Index("payments")                    
                    .Query(q => q.MatchAll() )

                     .Aggregations(a => a

                     .Terms("paymentstatus_types", ts => ts
                        .Field(o => o.paymentstatus)
                            .Aggregations(aa => aa
                                .Sum("sumreceiptamount", sa => sa
                                    .Field(o => o.totalreceiptamount)
                                    )
                                )
                            )
                        )
                    );

var paymentRecords = paymentSearchResponse.Documents ; // Count = 0

Я получаю ноль ( 0) рассчитывать, если в платежах 356 документов. Индекс.

Мой DTO соответствует

public class PaymentReportModel
{
    public string paymentid { get; set; }
    public float? totalreceiptamount { get; set; }        
    public string paymentstatus { get; set; }       
}

Эквивалент DSL дает

"aggregations" : {
    "paymentstatus_types" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "ReceivedByCollector",
          "doc_count" : 36,
          "sumreceiptamount" : {
            "value" : 56914.14031982422
          }
        },
        {
          "key" : "CollectionAcknowledged",
          "doc_count" : 17,
          "sumreceiptamount" : {
            "value" : 6802.75
          }
        },
        {
          "key" : "PayInSlipCreated",
          "doc_count" : 10,
          "sumreceiptamount" : {
            "value" : 4183.0
          }
        },
        {
          "key" : "CollectionSuccess",
          "doc_count" : 5,
          "sumreceiptamount" : {
            "value" : 27.0
          }
        }
      ]
    }
  }
}

В чем ошибка что я делаю?

1 Ответ

0 голосов
/ 21 апреля 2020

Таким образом, на основании вашего запроса вы не получите документы, потому что используете агрегаты. Это точно, если вы хотите документы, то вы удалите размер: 0. Затем вы получите агрегированный результат, а также документы размером 10.

...