NEST Elasticsearch 高级排序

NEST Elasticsearch advanced sorting

我有很多动物文档,我想对这些项目进行排序,猫应该先结果,然后是其他动物。

我的做法

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

但是没有得到想要的结果。

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