【发布时间】:2012-03-22 10:26:14
【问题描述】:
我即将编写一个具有分布式索引的近实时搜索应用程序。现在我想知道在多个索引上实现搜索的正确方法是什么:
我已阅读有关 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() 而不是遍历所有 IndexReader,重新打开它们,而不是创建新的 IndexSearchers...
【问题讨论】: