У меня есть ниже POCO
public class Collection
{
public string Amount { get; set; }
public string AccountId { get; set; }
public string ReceiptId { get; set; }
}
Я ищу
a) Сумма суммы b) Количество ReceiptId
группировка по AccountId с использованием Nest.
, поскольку я новичок в Elasti c Поиск и Nest, у меня возникли трудности при создании запроса.
Вот что у меня есть до сих пор пробовал
var result = ConnectionToES.EsClient().Search<Collection>(s => s
.Index("collections")
.Aggregations(a => a
.Terms("ReceiptId", ts => ts
.Field(o => o.AccountId)
.Aggregations(aa => aa.Sum("Amount", sa => sa.Field(o => Convert.ToDecimal(o.Amount)))
)
)
)
);
Но когда я делаю то же самое с помощью LINQ, это работает
var res = ConnectionToES.EsClient().Search<Collection>(s => s
.Index("collections")
.From(0)
.Size(1000)
.Query(q => q.MatchAll()));
List<Collection> objCollection = new List<Collection>();
foreach (var hit in res.Hits)
{
objCollection.Add(
new Collection
{
Id = hit.Source.Id.ToString()
,
Amount = string.IsNullOrEmpty(hit.Source.Amount.ToString()) ? "0" : hit.Source.Amount.ToString()
,
AccountId = hit.Source.AccountId.ToString()
,
ReceiptId = hit.Source.ReceiptId.ToString()
,
CollectorId = hit.Source.CollectorId.ToString()
,
CollectionDate = hit.Source.CollectionDate.ToString()
});
}
var aggrResult = objCollection.GroupBy(t => t.AccountId)
.Select(t => new
{
AccountNumber = t.Key,
Count = t.Count(),
Amount = t.Sum(item => Convert.ToDouble(item.Amount)),
}).ToList();
Я хочу выполнить ту же агрегацию в ES-способе.