现在我有几个Lucene索引集(我称之为分片),它为不同的文档集编制索引。它们是独立的,这意味着我可以在不阅读其他内容的情况下对每个进行搜索。然后我收到一个查询请求。我想在每个索引集上搜索它并将结果组合起来形成最终的顶级文档。
我知道在评分文件时,Lucene需要知道< idf >每个术语,不同的索引集将给出不同的< idf >到同一个术语(因为不同的索引集包含不同的文档集)。据我所知,我无法直接比较不同索引集的文档得分。那我该如何产生最终结果呢?
一个明显的解决方案是首先合并索引,然后对大索引执行搜索。然而,这对我来说太耗费时间,因此是不可接受的。任何人都有其他更好的解决方案吗?
P.S。:除了Lucene和Hadoop之外,我不想使用任何软件包或软件(如Katta)。
答案 0 :(得分:6)
我认为MultiReader正是您所寻找的。如果您有多个IndexReader,请说reader1
和reader2
:
MultiReader multiReader = new MultiReader(reader1, reader2);
IndexSearcher searcher = new IndexSearcher(multiReader);