Lucene.net IndexSearcher.search нет результатов - PullRequest
1 голос
/ 04 января 2010

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

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);
}

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

1 Ответ

2 голосов
/ 05 января 2010

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

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

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

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

...