Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search Sitecore 7搜索,无法访问已处置的对象_Search_Lucene_Sitecore - Fatal编程技术网

Search 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

我一直在使用一些Sitecore 7搜索代码。下面的例子

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(),它似乎列举并解决了这个问题。我正在阅读您的教程。我也犯了同样的错误。如果您也更新本教程,对其他人来说将是非常好的。谢谢