2012-03-22 11 views
6

Dağıtılmış dizinlere yakın bir gerçek zamanlı arama uygulaması yazmak üzereyim. Şimdi birden indeksleri üzerinden arama uygulamak için doğru approch ne olduğunu merak:Lucene's MultiSearcher - IndexSearcher with MultiReader

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

Ama gördüğünüz gibi bu da mümkündür: Ben MultiSearcher okudum

, bu nedenle tek approch olurdu

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

Bu iki onay arasında anlamlı bir fark var mıdır? Okuyucu verilerinin dışında olup olmadığını sadece yerine onları yeniden açılması, tüm IndexReaders yinelemek ve oluşturma yeni IndexSearchers yerine) MultiReader.reopen (diyebiliriz çünkü ikincisi

cevap