我只是想知道 Lucene 是如何做到的,从源代码中我知道它会在使用 IndexReader 初始化搜索器时打开并加载段文件,但是有没有好心人告诉我 Lucene 如何计算文档中的词频特殊领域。有什么特殊的算法吗?在阅读 tf 上的解释代码时,我无法弄清楚,例如:
Explanation tfExplanation = new Explanation();
int d = scorer.advance(doc);
float phraseFreq = (d == doc) ? scorer.currentFreq() : 0.0f;
tfExplanation.setValue(similarity.tf(phraseFreq));
tfExplanation.setDescription("tf(phraseFreq=" + phraseFreq + ")");
Idf>0,但是为什么代码中的phraseFreq是0.0,我知道这是因为(d == doc)是假的,因为d=Integer.MAX_VALUE,我不知道为什么以及问题出在哪里。
我只有一个带有一个字段的文档,它被索引和存储,并且在调试代码中使用的文档是 1,比如 searcher.explan(booleanQuery,1);