Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch Elasticsearch嵌套:具有多个条件的排序术语聚合_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch Elasticsearch嵌套:具有多个条件的排序术语聚合,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch Elasticsearch嵌套:具有多个条件的排序术语聚合,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch Elasticsearch嵌套:具有多个条件的排序术语聚合

elasticsearch Elasticsearch嵌套:具有多个条件的排序术语聚合,elasticsearch,nest,elasticsearch,Nest,使用NEST,我需要能够订购具有多个条件的术语聚合(需要ElasticSearch 1.5或更高版本)。例如: “顺序”:[{“平均排名”:“描述”},{“平均得分”:“描述”}] 使用我创建的原始JSON来验证我是否获得了预期的行为,这非常有效。现在,在尝试使用NEST库将其转换为代码时,我不知道该如何实现 方法只有一个以字符串作为键的实现。我需要一个C#“params”类型的方法,该方法可以获取OrderDescending()和\或orderSuscending()元素的列表 有没有一种方

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

“顺序”:[{“平均排名”:“描述”},{“平均得分”:“描述”}]

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

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

  • 有没有一种方法可以在我忽略的鸟巢里做到这一点
  • NEST中有没有一种方法可以解决这个问题,我可以在需要的地方注入一些原始JSON
  • FWIW,我一直在使用“流畅”的风格来创建我的查询

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

  • 有没有办法使用“对象初始值设定项”对象并将其转换为“流畅”描述符?在本例中,是否将TermsAggregator转换为TermsAggregationDescriptor
  • 编辑2: 我本来应该提到我已经尝试了
    .OrderDescending(“平均排名”).OrderDescending(“平均分数”)
    。这只不过是链条上的最后一个。通过查看代码,我可以了解原因。每次调用
    OrderDescending
    都会盲目地更新字典,而不是检查字典是否已经更新,如果字典已经存在,则向字典添加一个新键

    基于此,我相信这是一个bug,我在这里输入了一个报告:

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

    “顺序”:{“平均排名”:“描述”,“平均得分”:“描述”}


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

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

    样本:

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

    NEST团队的Martijn Laarman反应非常迅速,非常友好,为我在上面描述的编辑2中报告的bug提供了解决方法。修复程序可以在同一错误报告的注释中找到:


    请注意,他为对象初始值设定项和流畅语法(我需要的语法)提供了一种变通方法。

    我在对术语聚合排序,而不是对搜索结果排序。无论如何,请参见WRT链接上方的“编辑2”。
    {
      "sort": [
        {
          "@timestamp": {
            "order": "asc"
          }
        },
        {
          "input.user.name": {
            "order": "desc"
          }
        }
      ]
    }