Luceneインデックス内のドキュメントの用語の検索を更新しようとしています。現在、検索スコアは、その用語がドキュメントに表示された回数に基づいています。私がやりたいのは、用語が存在する回数ではなく、用語が存在する場合のスコアです。したがって、用語が含まれているドキュメントは、用語が含まれているドキュメントと同じスコアを100回取得します。
Zend_Search_Lucene_Search_Similarityを自分のクラスで拡張しようとしましたが、正直なところ、スコアがまだかなり低いため、これが正しく機能しているかどうかはわかりません。
class MySimilarity extends Zend_Search_Lucene_Search_Similarity{
//override the default frequency of searching
public function tf($freq){
return 1.0;
}
public function lengthNorm($fieldName, $numTerms) {
return 1.0/sqrt($numTerms);
}
public function queryNorm($sumOfSquaredWeights) {
return 1.0/sqrt($sumOfSquaredWeights);
}
public function sloppyFreq($distance) {
return 1.0;
}
public function idfFreq($docFreq, $numDocs) {
return log($numDocs/(float)($docFreq+1)) + 1.0;
}
public function coord($overlap, $maxOverlap) {
return $overlap/(float)$maxOverlap;
}
}
今、これは古き良きグーグルを検索したときに私が見つけた例から構築されています。しかし、私が行った唯一の実際の変更は、tf()関数です。
これに関するどんな助けでも、そして今それが私の検索を本当に台無しにしているので、私は本当に素晴らしいでしょう。
ありがとう、
許す