0

我只是想知道 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);

4

1 回答 1

1

我终于发现这完全是因为在 lucene 中使用了方法 explain。explain 只适用于搜索结果,但是我以错误的输入变量(查询,int)的方式使用它,而 int 不是文件号。

于 2011-04-20T06:47:49.447 回答