Я собираюсь написать поисковое приложение почти в реальном времени с распределенными индексами.Теперь мне интересно, каков правильный подход для реализации поиска по нескольким индексам:
Я читал о 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));
Есть ли существенная разница между этими двумя подходами?Со вторым было бы легче справиться, если у читателя нет данных, потому что я мог бы просто вызвать MultiReader.reopen () вместо перебора всех IndexReaders, повторного их открытия и создания новых IndexSearchers ...