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)がfalseであるためです。これは、d = Integer.MAX_VALUEであるため、問題の理由と原因がわかりません。

インデックスが付けられて保存される1つのフィールドを持つドキュメントが1つだけあり、デバッグコードで使用されるドキュメントはsearcher.explan(booleanQuery、1);のように1です。

4

1 に答える 1

1

luceneでメソッドexplainを使用したことが原因であることがようやくわかりました。explainは検索結果でのみ正常に機能しますが、間違った入力変数(query、int)で使用したため、intはドキュメント番号。

于 2011-04-20T06:47:49.447 に答える