自定义相似类上的Lucene numDocs和doqFreq

自定义相似类上的Lucene numDocs和doqFreq,lucene,similarity,tf-idf,Lucene,Similarity,Tf Idf,我正在和Lucene做一个应用程序(我是它的noob),我面临一些问题。 我的应用程序使用Lucene 2.4.0库和自定义的类似实现(jar已导入) 在我的应用程序中,我手动计算doqFreq和numDocs(我添加所有索引的值,然后计算一个全局值,以便在每个查询中使用),我希望在自定义相似性实现中使用该值,以便计算新的IDF 问题是,我不知道如何在新的类似实现上使用(或发送)我的应用程序中的新doqFreq和numDocs值,因为我不想在这个额外类之外更改lucene的代码 有什么建议或例子

我正在和Lucene做一个应用程序(我是它的noob),我面临一些问题。 我的应用程序使用Lucene 2.4.0库和自定义的类似实现(jar已导入)

在我的应用程序中,我手动计算doqFreq和numDocs(我添加所有索引的值,然后计算一个全局值,以便在每个查询中使用),我希望在自定义相似性实现中使用该值,以便计算新的IDF

问题是,我不知道如何在新的类似实现上使用(或发送)我的应用程序中的新doqFreq和numDocs值,因为我不想在这个额外类之外更改lucene的代码

有什么建议或例子吗?我读了文件,但我现在不知道该怎么做


谢谢

您可以尝试扩展IndexReader并覆盖IndexReader.docFreq()和IndexReader.numDocs()。在此子类型中,您可以提供手动计算的数据。我不确定是否还有其他Lucene组件依赖于这些值,因此您可能需要在这里小心操作。

您可以尝试扩展IndexReader并覆盖IndexReader.docFreq()和IndexReader.numDocs()。在此子类型中,您可以提供手动计算的数据。我不确定是否有其他Lucene组件依赖于这些值,因此您可能需要在这里小心操作。

为什么必须手动计算docFreq和numDocs?听起来像是一个维护难题。首先,我计算每台服务器的docFreq和numDocs,然后我计算一个全局值,发送到所有服务器以计算idf。为什么必须手动计算docFreq和numDocs?听起来像是一个维护难题。首先,我计算每台服务器的docFreq和numDocs,然后计算一个全局值,发送到所有服务器,以计算idf。这看起来是个好主意。但是,请注意,Lucene在索引时会计算大部分内容,因此如果仅在检索期间修改相似度计算,则可能无法获得所需的效果。我通过更改自定义相似度实现(几个函数)上的一些参数来解决此问题,目前还没有问题。正如Yuval F所说,我不会得到我想要的结果。谢谢你这看起来是个好主意。但是,请注意,Lucene在索引时会计算大部分内容,因此如果仅在检索期间修改相似度计算,则可能无法获得所需的效果。我通过更改自定义相似度实现(几个函数)上的一些参数来解决此问题,目前还没有问题。正如Yuval F所说,我不会得到我想要的结果。非常感谢。