我有一个我想要计算聚合的产品目录.这对于顶级属性(如品牌名称,制造商等)来说非常简单.尝试计算价格的范围计数时会出现问题,因为我们以多种货币进行销售,而在确定这些计数时,我只想查询一种货币.时间.以下是我的产品对象映射示例:
public class Product
{
    public int ID { get; set;}
    public string Name { get; set; }
    public IList<Price> Prices { get; set; }
}
public class Price
{
    public int CurrencyID { get; set; }
    public decimal Cost { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下是价格低于100的所有产品的查询示例:
var cheapProducts = client.Search<Product>(s => s
    .From(0)
    .Size(1000)
    .Query(q => q
        .Range(r => r
            .LowerOrEquals(100)
            .OnField(f => f.Prices.FirstOrDefault().Cost))));
Run Code Online (Sandbox Code Playgroud)
这会生成的ElasticSearch请求是:
{
    "from": 0,
    "size": 1000,
    "query": {
        "range" : {
            "prices.cost": {
                "lte": "100"
            } …Run Code Online (Sandbox Code Playgroud)