具有脚本的NEST汇总

问题描述 投票:1回答:2

我有这个弹性查询:

"aggs":{
  "GroupByDomeinRelatieCode":{
     "aggs":{
        "SumNettoRegelBedrag":{
           "sum":{
                    "script": {
                      "lang": "painless",
                      "source": "doc['nettoRegelbedrag'].value * (100 - doc['uitgesteldeKortingsPercentage'].value) / 100 "
                    } 
                 }
        }
     },
     "terms":{
        "field":"domeinRelatieCode.keyword",
        "size":10000
     }
  },
  "TotalSumAggragation":{
     "sum":{
                "script": {
                  "lang": "painless",
                  "source": "doc['nettoRegelbedrag'].value * (100 - doc['uitgesteldeKortingsPercentage'].value) / 100 "
                } 
             }
  }
}

并且我需要使用对象初始化程序将其转换为C#Nest。我当前的代码:

var aggs = new AggregationDictionary()
{
    { "GroupByDomeinRelatieCode" ,   new TermsAggregation("GroupByDomeinRelatieCode")
        {
            Field = Infer.Field<ElasticInvoiceLine>(x => x.DomeinRelatieCode.Suffix("keyword")),
            Size = 10000,
            Aggregations = new SumAggregation("SumNettoRegelBedrag", ADD SCRIPT HERE?)
        }
    },
    { "TotalSumAggragation", new SumAggregation("TotalSumAggragation", ADD SCRIPT HERE?)}
};

我尝试使用ScriptQuery和ScriptField,但是SumAggregation不接受。

var script = new ScriptQuery
{
    Name = "UitgesteldeKorting",
    Script = new InlineScript("doc['nettoRegelbedrag'].value * (100 - doc['uitgesteldeKortingsPercentage'].value) / 100")
    {
        Lang = "painless"
    },
};

var scriptField = new ScriptField()
{
    Script = new InlineScript("doc['nettoRegelbedrag'].value * (100 - doc['uitgesteldeKortingsPercentage'].value) / 100")
    {
        Lang = "painless"
    }
};

我不知道如何将脚本部分添加到SumAggregations。我怎样才能做到这一点?谢谢!

elasticsearch c#-4.0 nest
2个回答
0
投票

您可以尝试这个吗?

{
  "aggs": {
    "GroupByDomeinRelatieCode": {
      "aggs": {
        "SumNettoRegelBedrag": {
          "sum": {
            "script": "doc['nettoRegelbedrag'].value * (100 - doc['uitgesteldeKortingsPercentage'].value) / 100 "
          }
        }
      },
      "terms": {
        "field": "domeinRelatieCode.keyword",
        "size": 10000
      }
    },
    "TotalSumAggragation": {
      "sum": {
        "script": "doc['nettoRegelbedrag'].value * (100 - doc['uitgesteldeKortingsPercentage'].value) / 100 "
      }
    }
  }
}

0
投票

您可以像这样通过Script属性传递脚本

Aggregations = new SumAggregation("SumNettoRegelBedrag", null) { Script = new InlineScript("") }

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.