2012-03-22 11 views
6

Estoy a punto de escribir una aplicación de búsqueda casi en tiempo real con índices distribuidos. Ahora me pregunto ¿cuál es el approch correcta para implementar la búsqueda a través de múltiples índices:MultiSearcher de Lucene contra IndexSearcher con MultiReader

que he leído sobre el MultiSearcher, por lo que uno approch sería:

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

Pero como veo esto también es posible:

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

¿Hay alguna diferencia significativa entre estos dos enfoques? El segundo sería fácil de manejar si el lector no tiene datos, porque podría llamar a MultiReader.reopen() en lugar de iterar sobre todos los lectores de índices, reabrirlos y crear nuevos IndexSearchers ...

Respuesta