Как сортировать / фильтровать, используя новый API Sitecore.Search - PullRequest
6 голосов
/ 06 сентября 2011

Мне не удалось найти способ сортировки и фильтрации с использованием нового API Sitecore.Search. Lucene предоставляет следующие методы:

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

Но я не думаю, что Sitecore.Search API предоставляет эти возможности. Я что-то пропустил? Может кто-нибудь объяснить, как выполнять фильтрацию и сортировку с новым API Sitecore.Search? Или мне нужно использовать завернутый Searcher.Search(Query, Sort) для достижения этого?

Я использую Sitecore 6.5.

Спасибо.

1 Ответ

13 голосов
/ 06 сентября 2011

Вы можете расширить 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); 
} 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...