在Lucene中,我可以搜索一个索引但是从另一个索引使用IDF吗?

时间:2011-03-10 18:04:28

标签: java search lucene tf-idf

我正在构建一个系统,我只想显示过去几天索引的结果。 此外,如果我只想在几天内返回结果(数千份文件),我不想保留一个包含一百万份文件的巨大索引。

另一方面,我的系统严重依赖于索引中存储的文档中术语的出现具有实际分布(因此:逼真的IDF)。

那就是说,我想用一个小索引来返回结果,但我想用更大的索引(甚至是外部源)使用IDF来计算文档得分。

相似性API似乎不允许我这样做。 idf 方法不会将所使用的术语作为参数接收。

另一种可能性是使用TrieRangeQuery确保显示的文档在过去几天内。同样,我宁愿不保留更大的指数。这种查询也不便宜。

1 个答案:

答案 0 :(得分:2)

您应该能够扩展IndexReader并覆盖docFreq()方法以提供您想要的任何值。这个实现可以做的一件事是打开两个IndexReader实例 - 一个用于小索引,一个用于大索引。所有方法都委托给小型IndexReader,但docFreq()除外,它被委托给大型索引。您需要缩放返回的值,即

int myNewDocFreq = bigIndexReader.docFreq(t) / bigIndexReader.maxDoc() * smallIndexReader.maxDoc()