排序Sitecore搜索结果
我有一个排序Sitecore搜索结果,sitecore,sitecore7.2,Sitecore,Sitecore7.2,我有一个IQueryable对象作为搜索结果对象。 我在此搜索对象上应用筛选和排序 在调用GetResults()之前,我想根据字段的一个(Fieldname-Priority)值对结果进行排序。因此,对于IQueryable对象中的所有项目,我想按优先级字段对它们进行排序,因此所有具有该字段值的项目都位于顶部,其余项目位于底部 我有优先级字段的fieldmap条目 search.OrderByDescending(i => !string.IsNullOrEmpty(i.GetItem(
IQueryable
对象作为搜索结果对象。
我在此搜索对象上应用筛选和排序
在调用GetResults()
之前,我想根据字段的一个(Fieldname-Priority
)值对结果进行排序。因此,对于IQueryable
对象中的所有项目,我想按优先级字段对它们进行排序,因此所有具有该字段值的项目都位于顶部,其余项目位于底部
我有优先级字段的fieldmap
条目
search.OrderByDescending(i => !string.IsNullOrEmpty(i.GetItem().GetFieldValue("Priority")))
上面的命令不起作用。显然,我不能将Sitecore扩展方法用于IQueryable
如果我转换search.ToList()
。进行排序,然后将其转换回AsQueryable()
,我得到以下错误:
There is no method 'GetResults' on type 'Sitecore.ContentSearch.Linq.QueryableExtensions'
that matches the specified arguments
有没有一个简单快捷的方法来解决这个问题
干杯我认为您只需要将字段添加到SearchResultItem并将其标记为int。我假设该字段是int。创建一个继承SearchResultItem的自定义类
public class CustomSearchResultItem : SearchResultItem
{
[IndexField("Priority")]
public int Priority { get; set; }
}
然后在搜索中使用它。最后按它点菜
using (var context = ContentSearchManager.GetIndex("sitecore_master_index").CreateSearchContext())
{
var results = context.GetQueryable<CustomSearchResultItem>().Where(prod => prod.Content.Contains("search box text").OrderByDescending(t => t.Priority);
}
使用(var context=ContentSearchManager.GetIndex(“sitecore\u master\u index”).CreateSearchContext())
{
var results=context.GetQueryable().Where(prod=>prod.Content.Contains(“搜索框文本”).OrderByDescending(t=>t.Priority);
}
这里有一些数据
我认为您只需要将字段添加到SearchResultItem并将其标记为int。我假设该字段是int。创建一个继承SearchResultItem的自定义类
public class CustomSearchResultItem : SearchResultItem
{
[IndexField("Priority")]
public int Priority { get; set; }
}
然后在搜索中使用它。最后按它排序
using (var context = ContentSearchManager.GetIndex("sitecore_master_index").CreateSearchContext())
{
var results = context.GetQueryable<CustomSearchResultItem>().Where(prod => prod.Content.Contains("search box text").OrderByDescending(t => t.Priority);
}
使用(var context=ContentSearchManager.GetIndex(“sitecore\u master\u index”).CreateSearchContext())
{
var results=context.GetQueryable().Where(prod=>prod.Content.Contains(“搜索框文本”).OrderByDescending(t=>t.Priority);
}
这里有一些数据
您可以通过使用
OrderByDescending
和ThenByDescending
组合使用多个字段对搜索结果排序。因此,您需要按优先级排序,然后按[Name | Date | Whatever]排序
我想按优先级字段对它们进行排序,因此所有具有该字段值的项都位于顶部,其余项位于底部
我首先根据用户选择的标准(如名称、创建日期等)对它们进行排序。一旦返回结果,我需要按优先级字段对它们进行排序
您在问题和评论中与自己存在冲突。如果您希望结果具有优先级,然后是用户选择的结果,则以下操作将起作用:
query = dataQuery.OrderByDescending(i => i.Title).ThenByDescending(i => i["Priority"]);
var results = query.GetResults().Hits.Select(h => h.Document);
早期版本的Sitecore中存在一个错误,这意味着ThenBy
子句将添加到OrderBy
子句之前,因此它是以相反的方式添加的。您可能希望检查当前版本中是否已修复此问题。如果是,只需将查询更改为:
query = dataQuery.OrderByDescending(i => i["Priority"]).ThenByDescending(i => i.Title);
如果只想按字段排序,则不必将该字段添加到SearchResultItem中,前提是还需要将该字段的实际值返回给
如果需要按自定义用户提供的值订购,则可以传入i=>i[“用户选择的任何字段”]
,而不是i.Title
您可以在中找到更多信息。您可以使用
OrderByDescending
和ThenByDescending
组合使用多个字段对搜索结果排序。因此,您需要按优先级排序,然后按[Name | Date | which]排序
我想按优先级字段对它们进行排序,因此所有具有该字段值的项都位于顶部,其余项位于底部
我首先根据用户选择的标准(如名称、创建日期等)对它们进行排序。一旦返回结果,我需要按优先级字段对它们进行排序
您在问题和评论中与自己存在冲突。如果您希望结果具有优先级,然后是用户选择的结果,则以下操作将起作用:
query = dataQuery.OrderByDescending(i => i.Title).ThenByDescending(i => i["Priority"]);
var results = query.GetResults().Hits.Select(h => h.Document);
早期版本的Sitecore中存在一个错误,这意味着ThenBy
子句将添加到OrderBy
子句之前,因此它是以相反的方式添加的。您可能希望检查当前版本中是否已修复此问题。如果是,只需将查询更改为:
query = dataQuery.OrderByDescending(i => i["Priority"]).ThenByDescending(i => i.Title);
如果只想按字段排序,则不必将该字段添加到SearchResultItem中,前提是还需要将该字段的实际值返回给
如果需要按自定义用户提供的值订购,则可以传入i=>i[“用户选择的任何字段”]
,而不是i.Title
你可以在中找到更多信息。
我对这个搜索对象应用过滤和排序
-你是按多个字段排序吗?例如标题和优先级?@jammykam-排序是的。我首先根据用户选择的标准排序,如名称、创建日期等。一旦我得到结果,我需要按优先级字段排序。你是吗分页结果或者你能在得到结果后排序吗?我是分页结果@dnstommyAhh好的。下面的结果有效吗?我知道Lucene将所有东西都视为字符串。使用int是一件痛苦的事情。我对这个搜索对象应用筛选和排序
-你是按多个字段排序吗?例如标题和优先级?@jammykam-排序是的。我首先根据用户名、创建日期等用户选择的标准对它们进行排序。一旦我得到结果,我需要按照优先级字段对它们进行排序。你是分页结果还是可以在得到结果后进行排序?我是分页结果@dnstommyAhh ok。下面的结果有效吗?我知道Lucene将所有内容都视为字符串。使用int是一种pa在中。很抱歉,如果我的问题令人困惑。我将重新迭代。我首先根据用户选择的标准对它们进行排序,然后在优先级字段中对它们进行排序。我无法使用优先级字段进行排序。我得到的错误是排序只能在'Sitec'上进行