gpt4 book ai didi

c# - 如何执行SUM并在NEST中计数?

转载 作者:行者123 更新时间:2023-12-03 02:32:38 25 4
gpt4 key购买 nike

我有以下POCO

public class Collection
{
public string Amount { get; set; }

public string AccountId { get; set; }

public string ReceiptId { get; set; }

}

我在寻找

a)金额总和
b)收据编号

通过使用Nest的AccountId 分组。

由于我是Elastic Search和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方式进行相同的汇总。

最佳答案

几个指针可以帮助您

  • Amount应该是一个数字值(也许是double?),以便对其求和。
  • AccountId上的术语聚合看起来应该是ReceiptId,可以通过ReceiptId的值进行存储。另外,如果ReceiptId是不需要全文搜索的字符串值,则应将其映射为keyword数据类型,这将允许聚合,排序和术语级别查询。
  • 关于c# - 如何执行SUM并在NEST中计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59603817/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com