elasticsearch and.net中的动态字段排序

问题描述 投票:0回答:1

我正在尝试根据发送到搜索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;
                 })

在调试排序描述符时,向我显示了一个具有有效名称和顺序值的对象Value of sort descriptor object while debugging

此查询返回此代码的空列表。我能知道这里是什么问题吗?

c# elasticsearch nest elasticsearch-net
1个回答
0
投票

您可以根据输入获得排序顺序列表:

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

© www.soinside.com 2019 - 2024. All rights reserved.