2010-01-04 3 views
1

Я использую WCMS Sitecore и имею часть кода C#, которая использует Lucene.net для поиска индекса, основанного на некоторых критериях. Я использую класс IndexSearcher следующим образом:Lucene.net IndexSearcher.search нет результатов

Database webDB = Sitecore.Context.Database; 
Sitecore.Data.Indexing.Index index = webDB.Indexes["CampusNewsIndex"]; 
IndexSearcher indexSearcher = index.GetSearcher(webDB); 
BooleanQuery completeQuery = new BooleanQuery(); 
// build completeQuery 
Hits hits = indexSearcher.Search(completeQuery, sort); 

for (int i = 0; i < hits.length(); i++) 
{ 
    returnItems[i] = Sitecore.Data.Indexing.Index.GetItem(hits.Doc(i), Sitecore.Context.Database); 
} 

Этот код отлично работает, если результаты возвращаются. Однако, если «hits» не имеет никаких результатов, hits.length() возвращает 1, хотя логически имеет смысл вернуть 0. Кто-нибудь знает, как я могу определить, не возвратил ли запрос результат?

+0

Каковы данные, которые возвращаются в виде хитов, когда результатов нет? – danben

+0

Strange - length() должно быть 0 и равно 0 в реализации Java Lucene. Похоже на Lucene.Net или WCMS-ошибку ... Я бы сообщил об этом. –

+0

Да, чем больше я изучаю это, я собираюсь назвать это ошибкой Sitecore. Похоже, что Lucene что-то возвращает (хотя это не должно), а затем, когда Sitecore пытается оценить это, элемент равен нулю. Я также выложил для справки на форумах Sitecore и перейду сюда, если узнаю что-нибудь. – Kyle

ответ

2

Собственный эталонный код Sitecore на самом деле ожидает такого поведения. Reference

Item item = Index.GetItem(hits.Doc(i), db); 
if (item != null) 

Там может быть любое количество причин, почему вы получаете результаты обратно, но не получать их решенных через пункт распознаватель. Индексированный элемент может быть в другой базе данных, он может быть недоступен для текущего пользователя, он может быть доступен на другом языке, чем текущий язык контекста, и является наиболее распространенным.

Я предлагаю вам получить идентификатор «результата призрака», который вы получаете, и найти его внутри клиента Sitecore, посмотреть, что это такое. Может пролить свет на вопросы.

+0

Еще одна причина, по которой мне не нравится Sitecore. Спасибо за помощь. Пробовал искать «результат призрака» и не возвратил никаких результатов при входе в систему как пользователь admin в клиенте Sitecore. – Kyle