#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.