NEST Elasticsearch高级排序

时间:2017-11-20 08:56:39

标签: c# sorting elasticsearch nest elasticsearch-5

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

我的方法

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

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

1 个答案:

答案 0 :(得分: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())));