Запрос на поиск агрегации гнезд

#java #c# #database #elasticsearch #nest

#java #c# #База данных #elasticsearch #Гнездо

Вопрос:

Я пытаюсь использовать агрегации Elasticsearch через Nest. Сначала я создаю свои запросы в postman, тестирую их. Когда я вижу, что они работают, я пытаюсь создать через Nest. Но я не смог создать этот запрос в nest:

 {
"size":0,
"query":{
    "filtered":{
        "filter":{
            "term":{ "operationCode":"logincomplete"}
        }
    }
},
"aggregations" : {
    "operations": {
        "terms": {
            "field": "operationCode"
        },
        "aggs": {
            "login_count" : { "sum" : { "field" : "adet" } }
        }
    }
 }
}
  

В текущих документах мало что говорится об агрегациях в Nest. Так что я вроде как застрял. До сих пор я пробовал:

 var filterResults = client.Search<MCAOnlineExtRT>(s => s
            .Size(0)
            .Filter(q => q
            .Term(p => p.OperationCode, "logincomplete"))
            .Aggregations(a => a.Sum("login_count", t => t.Field(x => x.Adet)))
);
  

Спасибо!

Ответ №1:

Попробуйте это:

 var results = client.Search<MCAOnlineExtRT>(s => s
  .Size(0)
  .Query(q => q
    .Filtered(f => f
      .Filter(ff => ff
        .Term(o => o.OperationCode, "logincomplete"))))
  .Aggregations(a => a
    .Terms("operations", t => t.Field(o => o.OperationCode)
      .Aggregations(aa => aa
        .Sum("login_count", ss => ss.Field(o => o.Adet))))));
  

Который приведет к:

 {
  "size": 0,
  "aggs": {
    "operations": {
      "terms": {
        "field": "operationCode"
      },
      "aggs": {
        "login_count": {
          "sum": {
            "field": "adet"
          }
        }
      }
    }
  },
  "query": {
    "filtered": {
      "filter": {
        "term": {
          "operationCode": "logincomplete"
        }
      }
    }
  }
}
  

Обратите внимание, насколько точно fluent API соответствует json DSL, это почти дословно. Кроме того, aggs это сокращенная форма для aggregations in ES.