2012-03-22 50 views
6

我正準備用分佈式索引編寫一個接近實時的搜索應用程序。現在,我不知道什麼是實現了多個索引搜索正確的計算策略:Lucene的MultiSearcher與IndexRearcher與MultiReader

我已閱讀有關MultiSearcher,這樣一個計算策略是:

IndexSearcher[] indexSearchers = new IndexSearcher[indexCount]; 

for (int i = 0; i < indexCount; i++) { 
    File directory = new File(indexdir, String.valueOf(i)); 
    IndexWriter indexWriter = new IndexWriter(FSDirectory.open(directory), analyzer, IndexWriter.MaxFieldLength.LIMITED); 

    IndexReader indexReader = indexWriter.getReader(); 
    indexSearchers[i] = new IndexSearcher(indexReader); 
} 

MultiSearcher searcher = new MultiSearcher(indexSearchers); 

但正如我看這也是可能的:

IndexReader[] indexReader = new IndexReader[indexCount]; 

for (int i = 0; i < indexCount; i++) { 
    File directory = new File(indexdir, String.valueOf(i)); 
    IndexWriter indexWriter = new IndexWriter(FSDirectory.open(directory), analyzer, IndexWriter.MaxFieldLength.LIMITED); 

    indexReader[i] = indexWriter.getReader();   
} 

IndexSearcher searcher = new IndexSearcher(new MultiReader(indexReader)); 

這兩種方法有什麼不同嗎?如果讀者沒有數據,第二個將被easyer處理,因爲我可以調用MultiReader.reopen()而不是遍歷所有IndexReader,重新打開它們並創建新的IndexSearchers ...

回答