【问题标题】:Elasticsearch NEST: ordering terms aggregation with multiple criteriaElasticsearch NEST:使用多个条件排序术语聚合
【发布时间】:2015-05-08 19:33:41
【问题描述】:

使用 NEST,我需要能够订购具有多个条件的术语聚合(需要 ElasticSearch 1.5 或更高版本)。例如:

"order": [{"avg_rank": "desc"}, {"avg_score": "desc"}]

使用我创建的原始 JSON 来验证我是否获得了预期的行为,这非常有效。现在,在尝试使用 NEST 库将其转换为代码时,我不知道如何实现。

OrderDescending() 方法只有一个实现,它接受一个字符串作为键。我需要一个可以获取OrderDescending() 和\或OrderAscending() 元素列表的C#“params”类型方法。

  1. 有没有办法在我忽略的 NEST 中执行此操作?
  2. NEST 中有没有办法解决这个问题,我可以在需要的地方注入一点原始 JSON?

FWIW,我一直在使用“流利”样式来创建查询。

编辑: 我看到,使用“对象初始化器”语法,我可以手动创建字典并添加我的条件元素。问题是,我有大量用“流利”语法编写的代码。所以,

  1. 有没有办法使用“对象初始化器”对象并将其转换为“流畅”描述符?在这种情况下,一个 TermsAggregator 到一个 TermsAggregationDescriptor?

编辑 2: 我本来应该提到我已经尝试过.OrderDescending("avg_rank").OrderDescending("avg_score")。这只是在链中的最后一个。在查看代码时,我可以明白为什么。每次调用OrderDescending 时都会盲目地更新字典,而不是检查是否已经更新了字典,如果字典已经存在则向字典中添加新键。

基于此,我认为这是我在此处输入报告的错误: OrderDescending and OrderAscending cannot be chained for multi-criteria ordering

编辑 3: 我感谢所有答案(其中一些已被删除),因为他们正在帮助推动这一进程并负责这些编辑。我最初也应该提到我发现:

"order": { "avg_rank": "desc", "avg_score": "desc" }

不起作用。我不知道为什么,但 ES 在这种情况下只会使用最后一个。它有一个字典列表,如我上面的示例所示。我已经验证正确地对第二个元素的聚合进行了子排序。因此,不能将底层对象键入为简单的字典。我还将此信息添加到我创建的错误报告中(如 EDIT 2 中所述)。

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    如果您使用流利的语法,您可以将排序链接在一起。

    示例:

        var esClient = ninjectKernel.Get<IElasticClient>();
        var query = esClient.Search<RedemptionES>(s=> s
            .SortAscending(a=>a.Date)
            .SortDescending(d=>d.Input.User.Name)
            );
    

    回复:

    {
      "sort": [
        {
          "@timestamp": {
            "order": "asc"
          }
        },
        {
          "input.user.name": {
            "order": "desc"
          }
        }
      ]
    }
    

    【讨论】:

    • 我正在订购术语聚合,而不是对搜索结果进行排序。无论如何,请参阅 WRT 链接上方的“编辑 2”。
    【解决方案2】:

    NEST 团队的 Martijn Laarman 反应迅速,并且非常友好地为我在上述描述的 EDIT 2 中报告的错误提供了解决方案。修复可以在同一错误报告的 cmets 中找到:Work around for NEST library multi-criteria aggregation ordering

    请注意,他为对象初始化器和流畅语法(我需要的那个)提供了一种解决方法。

    【讨论】:

      猜你喜欢
      • 2015-11-06
      • 1970-01-01
      • 2016-06-22
      • 2014-07-09
      • 1970-01-01
      • 2018-10-18
      • 2021-06-06
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多