У меня есть документы, хранящиеся в моем индексе, и я хочу объединить все документы по ключу и взять для каждого из результатов агрегации, отсортированных по убыванию, определенное поле последнего документа.
Мое сопоставление выглядит следующим образом:
{
"mapping": {
"campaignbudgetrecord": {
"properties": {
"campaignBudget": {
"type": "nested",
"properties": {
"accountId": {
"type": "integer"
},
"advertiserId": {
"type": "integer"
},
"budget": {
"type": "double"
},
"budgetType": {
"type": "integer"
},
"campaignId": {
"type": "integer"
},
"paid": {
"type": "double"
},
"paidDaily": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"paidToday": {
"type": "double"
},
"totalBudget": {
"type": "double"
}
}
},
"campaignBudgetDate": {
"type": "date"
}
}
}
}
}
Подводя итог, я хотел бы объединить все мои CampaignBudgetRecords по ключу (accountId), отсортированные по campaignBudgetDate, и суммировать totalBudget каждой из последней записи, чтобы получитьобщий бюджет моего аккаунта из его кампаний.
Я пытался сделать это, используя это:
var accountBudgetResponse = await elasticClient.SearchAsync<CampaignBudgetRecord>(s =>
s.Index(_variableService.ElasticSearchCampaignBudgetIndexName).Type(typeof(CampaignBudgetRecord))
.Aggregations(a => a.Nested("Budget", n => n.Path(p => p.CampaignBudget)
.Aggregations(ag => ag
.Terms("ByCampaignId", tad => tad
.Field(o => o.CampaignBudget.CampaignId)))
.Aggregations(ad => ad
.Terms("CampaignTotalBudget", sad => sad
.Field(o => o.CampaignBudget.TotalBudget)
))
.Aggregations(ad => ad
.Sum("AccountTotalBudget", sad => sad
.Field(o => o.CampaignBudget.TotalBudget)
)))).Sort(ss => ss.Field(f => f.Field(ff => ff.CampaignBudgetDate).Order(SortOrder.Descending))).Query(q => q.Nested(n =>
n.Path(p => p.CampaignBudget).Query(qq => qq.Bool(b =>
b.Must(m => m.Match(a =>
a.Field(f => f.CampaignBudget.AccountId).Query(visualizationEntity.EntityId.ToString()))))))).Size(0));
Но я получаю корзину с суммой всего итогового бюджета, дажете, которые поступают из одного и того же идентификатора campaignBudget campaignId, поэтому он не агрегирует последний из каждого рекламного кампании.Я прочитал несколько примеров из документации NEST.NET, но мне не удалось заставить его работать, и я застрял.