MultiSearcher от Lucene против IndexSearcher с MultiReader - PullRequest
6 голосов
/ 22 марта 2012

Я собираюсь написать поисковое приложение почти в реальном времени с распределенными индексами.Теперь мне интересно, каков правильный подход для реализации поиска по нескольким индексам:

Я читал о 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 ...

1 Ответ

3 голосов
/ 22 марта 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...