2010-01-04 61 views
1

我正在使用Sitecore WCMS並且有一段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.length()返回1,即使它返回0是合理的。是否有人知道如何判斷查詢是否返回結果?

+0

沒有結果時返回的數據是什麼? – danben 2010-01-04 18:58:38

+0

奇怪 - length()應該爲0,並且在Lucene的Java實現中爲0。看起來像一個Lucene.Net或WCMS的錯誤...我會報告它。 – 2010-01-04 19:00:04

+0

是的,我正在研究它越多,我打算稱這是一個Sitecore錯誤。它看起來像Lucene返回的東西(儘管它不應該),然後當Sitecore試圖評估它到一個項目它爲空。我已經在Sitecore論壇上發佈了幫助,如果發現任何問題,我會在這裏發佈。 – Kyle 2010-01-04 19:36:20

回答

2

Sitecore自己的引用代碼實際上期望這種行爲。 Reference

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

可能有任意數量的,爲什麼你得到結果返回,但沒有得到他們通過項目解析器解析的原因。編入索引的項目可能位於另一個數據庫中,它可能對當前用戶不可用,它可能以與當前上下文語言不同的語言提供 - 是最常用的語言。

我建議你拿到你得到的「鬼結果」的ID,然後在Sitecore Client中搜索它,看看它是什麼。可能會讓事情更清楚一些。

+0

我不喜歡Sitecore的另一個原因。謝謝您的幫助。嘗試查找「幻影結果」,並以Sitecore客戶端中的管理員用戶身份登錄時沒有返回結果。 – Kyle 2010-01-05 13:43:04