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 ...
¡Gracias! Debido a la política de la compañía, estoy usando lucene 2.9 así que no me he dado cuenta de que MultiSearcher está @Depricado. – woezelmann