1

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

我知道Lucene在对文档进行评分时,需要知道每个term的< idf >,而不同的索引集会给同一个term赋予不同的< idf >(因为不同的索引集持有不同的文档集)。因此,据我了解,我无法直接比较来自不同索引集的文档分数。那么我应该如何生成最终结果呢?

一个明显的解决方案是首先合并索引,然后在大索引上执行搜索。但是,这对我来说太耗时了,因此无法接受。有人有其他更好的解决方案吗?

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

4

1 回答 1

7

我认为MultiReader是您正在寻找的。如果您有多个 IndexReader,请说reader1and reader2

MultiReader multiReader = new MultiReader(reader1, reader2);
IndexSearcher searcher = new IndexSearcher(multiReader);
于 2013-05-28T15:34:12.580 回答