2011-09-06 10 views
6

No pude encontrar ninguna forma de ordenar y filtrar utilizando la nueva API Sitecore.Search. Lucene proporciona los siguientes métodos:Cómo ordenar/filtrar utilizando la nueva API de Sitecore.Search

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

Pero no creo Sitecore.Search API expone estas características. ¿Me estoy perdiendo de algo? ¿Puede alguien explicar cómo realizar el filtro y ordenar con la nueva API Sitecore.Search? ¿O necesito usar el Searcher.Search(Query, Sort) envuelto para lograr esto?

Estoy usando Sitecore 6.5.

Gracias.

+0

¿Has descubierto cómo filtrar? –

+0

@Lavinski - Sí, extendí la clase IndexSearchContext y expuse los métodos requeridos, como lo sugirió techphoria414. Por favor vea la respuesta aceptada a continuación. – Sudeep

Respuesta

13

Puede extender IndexSearchContext para tener métodos que acepten un objeto Lucene.Net.Search.Sort. Uno de los miembros de mi equipo se dio cuenta de esto y está bastante limpio.

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

Eso pensé. Gracias techphoria414 por el ejemplo. Voy a probar esto. – Sudeep

Cuestiones relacionadas