我正在构建一个系统,我只想显示过去几天索引的结果。 此外,如果我只想返回几天的结果(数千个文档),我不想维护包含一百万个文档的巨型索引。
另一方面,我的系统严重依赖索引中存储的文档中术语的出现具有实际分布(因此:实际 IDF)。
也就是说,我想使用一个小索引来返回结果,但我想使用来自更大索引(甚至外部源)的 IDF 来计算文档分数。
Similarity API 似乎不允许我这样做。 idf 方法不接收正在使用的术语作为参数。
另一种可能性是使用 TrieRangeQuery 来确保显示的文档是在最近几天内的。再说一遍,我不想维护更大的索引。而且这种查询并不便宜。
最佳答案
您应该能够扩展 IndexReader 并重写 docFreq() 方法以提供您想要的任何值。该实现可以做的一件事是打开两个 IndexReader 实例——一个用于小索引,一个用于大索引。除了 docFreq() 委托(delegate)给大索引之外,所有方法都委托(delegate)给小 IndexReader。您需要缩放返回的值,即
int myNewDocFreq = bigIndexReader.docFreq(t) / bigIndexReader.maxDoc() * smallIndexReader.maxDoc()
关于java - 在 Lucene 中,我可以搜索一个索引但使用另一个索引中的 IDF 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5263816/