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)がfalseであるためです。これは、d = Integer.MAX_VALUEであるため、問題の理由と原因がわかりません。
インデックスが付けられて保存される1つのフィールドを持つドキュメントが1つだけあり、デバッグコードで使用されるドキュメントはsearcher.explan(booleanQuery、1);のように1です。