search - La búsqueda de Sitecore 7 no puede acceder a un objeto eliminado
lucene (2)
¿ GetResults()
devuelve una List
o IQueryable
/ IEnumerable
?
Intenta devolver una lista en caso de que no lo esté ya.
return query.GetResults().ToList();
Aclamaciones
He estado trabajando con algún código de búsqueda de Sitecore 7. Ejemplo a continuación.
using (var context = Index.CreateSearchContext())
{
// ....Build predicates
var query = context.GetQueryable<SearchResultItem>().Where(predicate);
return query.GetResults();
}
Esto funciona bien en SOLR, pero cuando se usa con Lucene estándar, siempre que hago referencia a una propiedad en SearchResults<SearchResultItem>
devuelta por GetResults()
, los errores de Sitecore con " Cannot access a disposed object
". Parece que GetResults()
no enumera y aún se cuelga en el texto de búsqueda.
¿Alguien se encuentra con esto antes y sabe cómo solucionarlo? He visto algunos artículos que sugieren tener el SearchContext
en estado de aplicación, pero lo ideal es evitarlo.
Gracias
Ian
Parece que SearchResults<T>
contiene una referencia a SearchHit
y LuceneSearchProvider
no mantiene abierto un lector. La nueva versión de Lucene cierra automáticamente el lector. Creo que podrías devolver el tipo incorrecto. Probablemente deberías hacer esto así:
var query = context.GetQueryable<SearchResultItem>().Where(predicate);
return query.ToList();
Sin embargo, asegúrese de no devolver demasiados. Probablemente deberías usar take () etc.