【问题标题】:NEST Elasticsearch advanced sortingNEST Elasticsearch 高级排序
【发布时间】:2018-05-03 10:42:21
【问题描述】:

我有很多动物文件,我想对项目进行排序,猫应该首先得到,其他动物在后。

我的方法

var client = new Nest.ElasticClient(settings);
client.Search<Animals>(s => s.MatchAll().Sort(y => y.Descending(d => d.Type == "cat"))); 

但它没有给出想要的结果。

【问题讨论】:

    标签: c# sorting elasticsearch nest elasticsearch-5


    【解决方案1】:

    为此,您需要使用script sorting

    如果您希望源中的字段具有名称类型。您无法获取文本字段的值,但这适用于关键字字段

       var items =  db.Search<Animals>(s => s.
                       Index("test").
                       Type("").
                       Sort(sort => sort.
                                    Script(sd => sd.
                                                 Type("number").
                                                 Script(sdd => sdd.
                                                               Inline("doc['type.keyword'].value == 'cat' ? 0 : 1")).
                                                               Ascending())));
    

    如果你想要源的索引类型。注意我不建议将它用于新应用程序,因为它们将在 ES6 中删除它

    var items2 = db.Search<Animals>(s => s.
                    Index("test").
                    Type("").
                    Sort(sort => sort.
                                 Script(sd => sd.
                                              Type("number").
                                              Script(sdd => sdd.
                                                            Inline("doc['_type'].value == 'cat' ? 0 : 1")).
                                                            Ascending())));
    

    【讨论】:

    • type.keyword 应该是 Animals.Type
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多