如何使用新的Sitecore.Search API进行排序/过滤

时间:2011-09-06 01:47:04

标签: lucene.net sitecore sitecore6

我找不到使用新的Sitecore.Search API进行排序和过滤的方法。 Lucene提供以下方法:

Search(Query query, Filter filter)
Search(Query query, Sort sort)
Search(Query query, Filter filter, Sort sort)

但我不认为Sitecore.Search API会公开这些功能。我错过了什么吗?有人可以解释如何使用新的Sitecore.Search API执行过滤和排序吗?或者我是否需要使用包裹的Searcher.Search(Query, Sort)来实现此目的?

我正在使用Sitecore 6.5。

感谢。

1 个答案:

答案 0 :(得分:13)

您可以扩展IndexSearchContext以使方法接受Lucene.Net.Search.Sort对象。我的一个团队成员发现了这一点并且很干净。

public class SortableIndexSearchContext : IndexSearchContext 
{ 
public SortableIndexSearchContext(ILuceneIndex index) 
{ 
Initialize(index, true); 
} 
public SearchHits Search(Query query, Sort sort) 
{ 
return Search(query, SearchContext.Empty, sort); 
} 
public SearchHits Search(PreparedQuery query, Sort sort) 
{ 
return new SearchHits(Searcher.Search(query.Query, sort)); 
} 
public SearchHits Search(QueryBase query, Sort sort) 
{ 
return Search(query, SearchContext.Empty, sort); 
} 
public SearchHits Search(string query, Sort sort) 
{ 
return Search(query, SearchContext.Empty, sort); 
} 
public SearchHits Search(Query query, ISearchContext context, Sort sort) 
{ 
return Search(Prepare(query, context), sort); 
} 
public SearchHits Search(QueryBase query, ISearchContext context, Sort sort) 
{ 
return this.Search(Prepare(Translate(query), context), sort); 
} 
public SearchHits Search(string query, ISearchContext context, Sort sort) 
{ 
return this.Search(Parse(query, context), sort); 
} 
}