2011-09-06 11 views
6

新しいSitecore.Search APIを使用して並べ替えやフィルタリングを行う方法が見つかりませんでした。 Luceneは以下のメソッドを提供しています:新しいSitecore.Search APIを使用して並べ替え/フィルタリングする方法

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を使用しています。

ありがとうございました。

+0

フィルターの仕組みを理解しましたか? –

+0

@Lavinski - はい、techphoria414のように、IndexSearchContextクラスを拡張し、必要なメソッドを公開しました。以下の回答をご覧ください。 – Sudeep

答えて

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); 
} 
} 
+0

そう思った。この例ではtechphoria414に感謝します。私はこれを試してみる。 – Sudeep

関連する問題