在多个字段上排序

use*_*920 7 nest

Nest是否支持在多个字段上进行排序?例如,假设我想首先按FieldA升序排序,然后按FieldB降序排序.

我目前的方法看起来像这样:

searchDescriptor.Sort(s =>s.OnField("FieldA").Ascending().OnField("FieldB").Descending());
Run Code Online (Sandbox Code Playgroud)

但是"FieldB".Descending()部分似乎是发送给elasticsearch的唯一排序选项.

有谁知道是否有另一种方法来实现这一目标?

Gre*_*uka 10

您正在同一排序描述符上添加多个字段,这将覆盖以前的值.相反,您需要为每个字段指定一个新的排序描述符:

searchDescriptor
    .Sort(s => s
        .OnField("FieldA")
        .Ascending()
    )
    .Sort(s => s
        .OnField("FieldB")
        .Descending()
    )
Run Code Online (Sandbox Code Playgroud)

  • 这不再有效.多个.Sort(...)将导致最后一个覆盖所有先前的排序命令. (3认同)

Mag*_* O. 7

我最近版本的 Nest 对多个文件进行排序的正确方法是:

.Sort(s => s
    Field(f => f
        .Field("FieldA")
        .Order(SortOrder.Ascending)
    )
    .Field(f => f
        .Field("FieldB")
        .Order(SortOrder.Ascending)
    )
);
Run Code Online (Sandbox Code Playgroud)

  • 测试这个: ..Sort(sort => sort .Field(i => i .Field(ii => ii.Year == 0) .Order(SortOrder.Descending) ) .Field(i => i .Field(ii => ii.Year) .Order(SortOrder.Ascending) ) ) (4认同)