2014-02-17 3 views
7

Я работаю с поисковым кодом Sitecore 7. Пример ниже.Sitecore 7 Поиск, невозможно получить доступ к удаленному объекту

using (var context = Index.CreateSearchContext()) 
{ 
    // ....Build predicates 

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

Это прекрасно работает в ГУМЗЕ, но при использовании стандартного Lucene, всякий раз, когда я ссылаться на недвижимость в SearchResults<SearchResultItem> возвращенного GetResults(), ошибки Sitecore с «Cannot access a disposed object». Похоже, что GetResults() не перечисляет и все еще зависает в searchcontext.

Кто-нибудь сталкивается с этим раньше и знает, как исправить? Я видел некоторые статьи, предлагающие иметь SearchContext в состоянии приложения, но в идеале я хочу этого избежать.

Благодаря

Ian

+0

Я читал учебник от вас [Sitecore 7 Поиск - это быстрый старт гид] (http://www.bekagool.com/news-and-insights/sitecore-7-search- а-Quickstart-гид). И у меня такая же ошибка. Это было бы здорово для других людей, если вы также обновите этот учебник. Благодаря! – Kamran

ответ

7

Кажется, что SearchResults<T> держит ссылку на SearchHit и LuceneSearchProvider не держит читателя открытым. Новая версия Lucene автоматически закрывает читателя. Я думаю, что вы можете возвращать неправильный тип. Вероятно, вы должны сделать следующее:

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

Однако убедитесь, что не возвращают слишком много. Вы, вероятно, следует использовать тейк() и т.д.

+0

Привет, Дженс, Спасибо за ваш быстрый ответ. Сначала вызывал ToList() в IQueryable, а затем вызывал GetResults() в IQueryable, сделал трюк. Спасибо Ian –

+0

Собственно, на дальнейших испытаниях это не сработало. Всякий раз, когда я вызываю GetResults, он по-прежнему требует контекста. Есть ли обновление для lucene, которое я могу получить для этого? –

+0

Зачем вам нужно вызвать метод GetResults()? Чего вы пытаетесь достичь? –

0

Is GetResults() возвращающую List или IEnumerable/IQueryable?

Попробуйте вернуть список, если его еще нет.

return query.GetResults().ToList(); 

Приветствия

+0

Спасибо за помощь. GetResults() возвращает SearchResults , поэтому нет IEnumerable, но я сначала сделал ToList() в IQueryable, и это, казалось, перечислило и устранило проблему. –

Смежные вопросы