最新.NET客户端中不使用Fluent Api实现ElasticSearch复杂排序
ElasticSearch 8.x 非FluentApi构建SortOptions方案
字段升降序排序
直接实例化FieldSort类即可,通过Field指定排序字段,Order属性设置升序(SortOrder.Ascending)或降序(SortOrder.Descending),示例代码如下:
var request = new SearchRequest(indexName) { From = from, Size = size, Query = searchQuery, Sort = new List<SortOptions> { // 字段升序排序 new FieldSort { Field = "field_name", Order = SortOrder.Ascending }, // 字段降序排序 new FieldSort { Field = "another_field", Order = SortOrder.Descending } } };
也可以结合SortOptions.Field()静态方法传入配置好的FieldSort实例:
Sort = new List<SortOptions> { SortOptions.Field(new FieldSort { Field = "field_name", Order = SortOrder.Ascending }) }
按得分排序
使用ScoreSort类实现按得分排序,默认是降序(得分高的文档靠前),如需调整顺序同样设置Order属性:
Sort = new List<SortOptions> { // 默认降序得分排序 new ScoreSort(), // 指定升序得分排序 new ScoreSort { Order = SortOrder.Ascending } }
或者用SortOptions.Score()静态方法配合配置器:
Sort = new List<SortOptions> { SortOptions.Score(s => s.Order(SortOrder.Ascending)) }
补充说明
8.x版本的Elasticsearch .NET客户端虽侧重FluentApi,但核心排序类(FieldSort、ScoreSort等)均可直接实例化,它们继承自SortOptions,可直接加入Sort列表使用。
内容的提问来源于stack exchange,提问作者Develorem
相关产品推荐
相关产品推荐

