我正在尝试根据发送到搜索API的动态字段名称对记录进行排序。d19FilterCriteria对象为我提供了字段名称(SortOn)和排序顺序(SortOrder)。我为此使用了排序描述符。
var sortDescriptor = new SortDescriptor<MPANStatus>();
// If Field Name is Dynamic
if (d19FilterCriteria.SortOrder == "asc")
{
sortDescriptor.Field(d19FilterCriteria.SortOn, Nest.SortOrder.Ascending);
}
else if (d19FilterCriteria.SortOrder == "desc")
{
sortDescriptor.Field(d19FilterCriteria.SortOn, Nest.SortOrder.Descending);
}
var result = await _elasticClient.SearchAsync<MPANStatus>(s => s
.Index("ampower-mpanstatusindex")
.Skip(skip)
.Size(pageSize)
.Sort(sort =>
{
sort = sortDescriptor;
return sort;
})
在调试排序描述符时,向我显示了一个具有有效名称和顺序值的对象
此查询返回此代码的空列表。我能知道这里是什么问题吗?
您可以根据输入获得排序顺序列表:
List<ISort> sdBookSortOrder = new List<ISort>();
SortOrder oSortOrder = SortOrder.Ascending; //SortOrder.Descending;
sdBookSortOrder.Add(new FieldSort { Field = <sField1>, Order = oSortOrder });
sdBookSortOrder.Add(new FieldSort { Field = <sField2>, Order = oSortOrder });
而且,您可以在发送搜索请求时使用上述排序顺序集合-如下所示:
ISearchRequest searchRequest = new SearchRequest(SearchEngine.IndexName)
{
From = iFrom,
Size = iSize,
Query = query,
Sort = oSortOrder,
};
我希望,它将解决您的问题。
关于,Nikunj