2013-01-16 30 views
0

我將我的Java應用程序從Lucene 2遷移到Lucene 4,並且找不到任何轉換我的代碼的好方法。我也嘗試去http://lucene.apache.org/core/4_0_0-ALPHA/MIGRATE.html,但其中的示例代碼根本不起作用(例如,方法reader.termDocsEnum不存在IndexReaderDirectoryReader,但僅用於AtomicReader我從來沒有聽說過)。從Lucene 2到Lucene 4

給定一個IndexReader稱爲indexReader,舊代碼爲:

Term find = new Term("field", "value"); 
TermDocs td = indexReader.termDocs(find); 
while (termDocs.next()) { 
    Document d = termDocs.doc(); 
    // do stuff 
} 

我怎麼能轉換的代碼? 謝謝!

+0

有一個錯誤:在'while'循環中,'termDocs'應該被替換爲'td'。 –

回答

1

下應與你的情況:

的文檔/位置枚舉不能尋求一個術語。相反,TermsEnum能夠搜索,然後您從該TermsEnum請求文檔/位置枚舉。

我猜你需要這樣的:

TermsEnum termsEnum = atomicReader.terms("fieldName").iterator(); 
BytesRef text = new BytesRef("searchTerm"); 
if (termsEnum.seekExact(text, true)) { 
    ... 
} 

低級API現在顯然是面向原子(非複合)的讀者,因爲這是最高性能的唯一途徑。您可能您從Directory中獲得的包裝te複合閱讀器在SlowCompositeReaderWrapper中,但是,由於類名稱已經發出警告,因此將會是