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

标签 java search lucene tf-idf

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

另一方面,我的系统严重依赖索引中存储的文档中术语的出现具有实际分布(因此:实际 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/

相关文章:

java - Eclipse RCP 应用程序 - 创建首选项页面条目,该条目已加密保存

c - 使用系统调用进行子字符串搜索

java - 使用 lucene 的荧光笔和完整性的问题。

java - 未知主机异常

java - google directions api 持续时间是否反射(reflect)实时路况?

java - 使用谷歌地图javascript api v3在谷歌地图上添加多个目的地

java - 当我在 SearchView 中输入内容时,列表的大小没有增加?

android - 在 Android 中实现搜索栏

java - Solr Filter Cache(FastLRUCache)占用内存过多导致内存不足?

google-app-engine - 谷歌应用引擎 (GAE) 上的 Lucene