1

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

另一方面,我的系统在很大程度上依赖于存储在索引中的文档中出现的术语具有真实的分布(因此:真实的 IDF)。

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

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

另一种可能性是使用 TrieRangeQuery 确保显示的文档在最近几天内。同样,我宁愿不维护更大的索引。这种查询也不便宜。

4

1 回答 1

2

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

int myNewDocFreq = bigIndexReader.docFreq(t) / bigIndexReader.maxDoc() * smallIndexReader.maxDoc()
于 2011-03-11T13:35:48.203 回答