Lucene:如何在几个独立的索引集上执行搜索并合并结果?

现在我有几个Lucene索引集(我称之为分片),它索引不同的文档集。 它们是独立的,这意味着我可以在不阅读其他内容的情况下对每个进行搜索。 然后我收到一个查询请求。 我想在每个索引集上搜索它,并将结果组合起来形成最终的顶级文档。

我知道在对文档进行评分时,Lucene需要知道每个术语的< idf >,不同的索引集会给同一个术语提供不同的< idf >(因为不同的索引集包含不同的文档集)。 因此,据我所知,我无法直接比较不同索引集的文档得分。 那么我应该如何生成最终结果呢?

一个明显的解决方案是首先合并索引,然后对大索引执行搜索。 然而,这对我来说太耗费时间,因此是不可接受的。 谁有其他更好的解决方案?

PS:除了Lucene和Hadoop之外,我不想使用任何软件包或软件(如Katta)。

我认为MultiReader就是你要找的。 如果你有多个IndexReader,比如reader1reader2

 MultiReader multiReader = new MultiReader(reader1, reader2); IndexSearcher searcher = new IndexSearcher(multiReader);