Sitecore 7搜索,无法访问已处置的对象

时间:2014-02-17 11:09:47

标签: search lucene sitecore

我一直在使用一些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处于申请状态,但理想情况下我想避免这种情况。

由于

伊恩

2 个答案:

答案 0 :(得分:7)

似乎SearchResults<T>保留对SearchHit的引用,而LuceneSearchProvider不会让读者打开。新版本的Lucene会自动关闭阅读器。我想你可能会回错了。你应该这样做:

var query = context.GetQueryable<SearchResultItem>().Where(predicate);
return query.ToList();

但请确保,不要返回太多。你应该使用take()等

答案 1 :(得分:0)

GetResults()返回ListIEnumerable / IQueryable

尝试返回列表,以防它尚未存在。

return query.GetResults().ToList();

干杯