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

Java 在Lucene中,我可以搜索一个索引,但使用另一个索引的IDF吗?,java,search,lucene,tf-idf,Java,Search,Lucene,Tf Idf,我正在构建一个系统,我只想显示过去几天索引的结果。 此外,如果我只想返回几天(数千个文档)的结果,我不想维护一个包含一百万个文档的庞大索引 另一方面,我的系统严重依赖于索引中存储的文档中出现的术语具有真实的分布(因此:真实的IDF) 也就是说,我希望使用一个小索引来返回结果,但我希望使用一个更大索引(甚至是外部源)中的IDF来计算文档分数 相似性API似乎不允许我这样做。idf方法不接收正在使用的术语作为参数 另一种可能是使用TrieRangeQuery确保显示的文档在最近几天内。再说一次,我宁

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

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

也就是说,我希望使用一个小索引来返回结果,但我希望使用一个更大索引(甚至是外部源)中的IDF来计算文档分数

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


另一种可能是使用TrieRangeQuery确保显示的文档在最近几天内。再说一次,我宁愿不要一个更大的指数。这种查询也不便宜。

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

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

我不太明白缩放的必要性。你能澄清一下吗?