代码之家  ›  专栏  ›  技术社区  ›  Toshi

NEST Elasticsearch高级排序

  •  0
  • Toshi  · 技术社区  · 7 年前

    我有很多动物文件,我想对这些物品进行分类, 猫应该是第一个 之后,其他动物。

    我的方法

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Filip Cordas    7 年前

    为此,您需要使用 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())));