在C#

时间:2019-05-08 09:53:33

标签: c# elasticsearch

我有基本的产品对象,其中包含ID,日期和销售数量。每种产品每天都有一个对象,并且该天的总销售额。我希望能够接受日期范围并在此日期之前返回最畅销的产品。

我试图获取某个日期范围内的销售总额,但将其按产品ID分组。这样我就可以在该日期范围内获得123、234,345等产品的总销售额,然后返回最畅销的10大产品。

这是我写的。响应似乎不正确,因为每个产品ID都有10个结果。每个产品ID仅应获得1个值,即总销售额。如果是SQL,我想获得按产品ID分组的销售总额。

var response = ElasticClient.Search<Product>(s => s
    .Index(this.Index)
    .Query(q => q
        .DateRange(dr => dr
            .Field(drf => drf.Date)
            .GreaterThanOrEquals(startDate)
            .LessThan(endDate)
        )
    )
    .Aggregations(ag => ag
        .Terms("productResults", pr => pr
            .Field(prf => prf.ProductID)
            .Size(10)
            .Aggregations(prag => prag
                .Sum("totalsales", sm => sm
                    .Field(f => f.TotalSales)
                )
            )
            .Order( o => o.Descending("totalsales"))
        )
    )
);

0 个答案:

没有答案