我一直在使用一些Sitecore 7搜索代码。以下示例。
using (var context = Index.CreateSearchContext())
{
// ....Build predicates
var query = context.GetQueryable<SearchResultItem>().Where(predicate);
return query.GetResults();
}
这在SOLR中运行良好,但是当与标准Lucene一起使用时,每当我引用SearchResults<SearchResultItem>
返回的GetResults()
中的属性时,Sitecore错误都会带有“Cannot access a disposed object
”。似乎GetResults()
没有枚举并仍然挂起到searchcontext。
之前有人遇到这个并且知道如何修复?我看过一些文章建议让SearchContext
处于申请状态,但理想情况下我想避免这种情况。
由于
伊恩
答案 0 :(得分:7)
似乎SearchResults<T>
保留对SearchHit
的引用,而LuceneSearchProvider
不会让读者打开。新版本的Lucene会自动关闭阅读器。我想你可能会回错了。你应该这样做:
var query = context.GetQueryable<SearchResultItem>().Where(predicate);
return query.ToList();
但请确保,不要返回太多。你应该使用take()等
答案 1 :(得分:0)
GetResults()
返回List
或IEnumerable
/ IQueryable
?
尝试返回列表,以防它尚未存在。
return query.GetResults().ToList();
干杯