我正在使用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);
}
如果返回结果,此代码可以正常工作。但是,如果“hits”没有结果,hits.length()返回1,即使它返回0有逻辑意义。有人知道如何判断查询是否没有结果吗?
答案 0 :(得分:2)
Sitecore自己的参考代码实际上期望这种行为。 Reference
Item item = Index.GetItem(hits.Doc(i), db);
if (item != null)
可能有多种原因导致您返回结果,但未通过项目解析器解析结果。索引项可能位于另一个数据库中,它可能对当前用户不可用,它可以使用与当前上下文语言不同的语言 - 最常见的语言。
我建议你掌握你获得的“幽灵结果”的ID,并在Sitecore客户端内搜索它,看看它是什么。可能会对事情有所了解。