elasticsearch 编写嵌套查询以按分数对聚合桶进行排序,elasticsearch,nest,elasticsearch-6,elasticsearch,Nest,Elasticsearch 6" /> elasticsearch 编写嵌套查询以按分数对聚合桶进行排序,elasticsearch,nest,elasticsearch-6,elasticsearch,Nest,Elasticsearch 6" />

elasticsearch 编写嵌套查询以按分数对聚合桶进行排序

elasticsearch 编写嵌套查询以按分数对聚合桶进行排序,elasticsearch,nest,elasticsearch-6,elasticsearch,Nest,Elasticsearch 6,我想要的是为每个unitId(这是我文档中的一个字段)创建一个聚合桶。我希望每个桶都按该桶的最大分数排序。我编写了以下查询,它满足了我的要求: "aggs": { "UnitAggregationBucket": { "terms": { "field": "unitId", "size": 10, "order": { "max_score": "desc" } },

我想要的是为每个
unitId
(这是我文档中的一个字段)创建一个聚合桶。我希望每个桶都按该桶的最大分数排序。我编写了以下查询,它满足了我的要求:

 "aggs": {
    "UnitAggregationBucket": {
      "terms": {
        "field": "unitId",
        "size": 10,
        "order": {
          "max_score": "desc"
        }
      },
      "aggs": {
        "max_score": {
          "max": {
            "script": "_score"
          }
        }
      }
    }
我正在使用脚本在子聚合中查找每个存储桶的最大分数。我不知道如何使用NEST?

Upadate编写上述查询: 这是我从中得到的答案:

对于6.x,这将类似于:

var client = new ElasticClient();

var searchResponse = client.Search<object>(s => s
    .Aggregations(a => a
          .Terms("UnitAggregationBucket", t => t
              .Field("unitId")
          .Size(10)
          .Order(o => o
              .Descending("maximum_score")
          )           
            .Aggregations(aa => aa
              .Max("maximum_score", m => m
                  .Script("_score")
              )
          )
      )
  ) 
);

var termsAgg = searchResponse.Aggregations.Terms("UnitAggregationBucket");

foreach(var bucket in termsAgg.Buckets)
{     
    // do something with buckets  
    var maxScore = bucket.Max("maximum_score").Value; 
}
这不是我想要的确切的json,但它做了我想要的


注意:
max\u score
是Elasticsearch中的一个保留关键字,因此我不得不使用另一个名称:
max\u score\u in\u bucket

var unitAggregations = new TermsAggregation("UnitAggregationBucket")
{
    Size 10,
    Field = Field<MyDocument>(p => p.UnitId),
    Order = new List<TermsOrder>
    {
        new TermsOrder()
        {
            Key = "max_score_in_bucket",
            Order = SortOrder.Descending
        }
    },
    Aggregations = new MaxAggregation("max_score_in_bucket", string.Empty)
    {
        Script = new InlineScript("_score")
    }
};
"aggs": {
    "UnitAggregationBucket": {
      "aggs": {
        "max_score_in_bucket": {
          "max": {
            "script": {
              "source": "_score"
            }
          }
        }
      },
      "terms": {
        "field": "unitId",
        "order": [
          {
            "max_score_in_bucket": "desc"
          }
        ],
        "size": 10
      }
    }
  }