Search Sitecore 7搜索,无法访问已处置的对象
我一直在使用一些Sitecore 7搜索代码。下面的例子Search Sitecore 7搜索,无法访问已处置的对象,search,lucene,sitecore,Search,Lucene,Sitecore,我一直在使用一些Sitecore 7搜索代码。下面的例子 using (var context = Index.CreateSearchContext()) { // ....Build predicates var query = context.GetQueryable<SearchResultItem>().Where(predicate); return query.GetResults(); } 使用(var context=Index.Cre
using (var context = Index.CreateSearchContext())
{
// ....Build predicates
var query = context.GetQueryable<SearchResultItem>().Where(predicate);
return query.GetResults();
}
使用(var context=Index.CreateSearchContext())
{
//…构建谓词
var query=context.GetQueryable().Where(谓词);
返回query.GetResults();
}
这在SOLR中运行良好,但与标准Lucene一起使用时,每当我引用由GetResults()
返回的SearchResults
中的属性时,Sitecore错误为“无法访问已处理的对象”。似乎GetResults()
没有枚举,仍然挂起searchcontext
有人以前遇到过这个问题,知道如何解决吗?我看到一些文章建议将SearchContext
设置为应用程序状态,但理想情况下我希望避免这种情况
谢谢
Ian似乎SearchResults
引用了SearchHit
,而LuceneSearchProvider
没有打开读卡器。新版Lucene会自动关闭阅读器。我想你可能回错型号了。您可能应该这样做:
var query = context.GetQueryable<SearchResultItem>().Where(predicate);
return query.ToList();
var query=context.GetQueryable().Where(谓词);
返回query.ToList();
但是,请确保不会返回太多。您可能应该使用take()等。是GetResults()
返回列表
还是IEnumerable
/IQueryable
尝试返回一个列表,以防它尚未返回
return query.GetResults().ToList();
干杯嗨,简,谢谢你的迅速回复。首先在IQueryable上调用ToList(),然后在IQueryable上调用GetResults(),就成功了。谢谢你,事实上,进一步的测试没有起作用。无论何时调用GetResults,它仍然需要一个上下文。我可以得到lucene的更新吗?为什么需要调用GetResults()方法?你想实现什么?GetResults将为你提供一个点击集合,提供评分信息,TotalSearchResults等。它节省了一些编码时间并提高了搜索性能。嗯。。。我明白你的意思,我调查过了。看起来,在离开using语句之前,您必须获得搜索结果的信息,这有点令人讨厌。也许这应该被报告为一个bug,因为这个类已经连接到阅读器上了。谢谢你的帮助。GetResults()返回一个SearchResults,因此没有IEnumerable,但我首先在IQueryable上做了一个ToList(),它似乎列举并解决了这个问题。我正在阅读您的教程。我也犯了同样的错误。如果您也更新本教程,对其他人来说将是非常好的。谢谢