0

私は現在、Zend_Search_Luceneを使用して、現在約1000程度の多数のドキュメントのインデックス作成と検索を行っています。私がやりたいのは、エンジンがドキュメントのヒットをスコアリングする方法を現在のデフォルトから変更することです。

Zend_Search_Luceneは、ドキュメント内のヒット数の頻度をスコアリングするため、PHPという単語が10回一致するドキュメントは、PHP3回一致するドキュメントよりもスコアが高くなります。私がやろうとしているのは、それらのキーワードのヒットに応じて、いくつかのキーワードとスコアを渡すことです。例えば

インデックスに対して検索するPHPMySQLJavascriptHTMLCSSの5つのキーワードを渡します。1つのドキュメントにはこれらのキーワードとの一致が3つあり、1つのドキュメントには4つの一致がすべてあり、4つの一致のスコアが最も高くなります。ドキュメント内のそれらの単語のインスタンスの数は私には関係ありません。

これで、Zend_Search_Lucene_Search_Similarityをざっと見てきましたが、これを使用して自分が求めていることを達成する方法がわからない(または明るい)ことを告白する必要があります。

Luceneを使用して私がやりたいことは可能ですか、それとももっと良い解決策がありますか?

4

1 に答える 1

1

マニュアルのZend_Search_Lucene_Search_Similarityセクションで理解したことについては、スコアを変更しないように、デフォルトの類似性クラスを拡張してtf(用語頻度)メソッドをオーバーライドすることから始めます。

class MySimilarity extends Zend_Search_Lucene_Search_Similarity {    
    public function tf($freq) {
        return 1.0; // overriding default sqrt($freq);
    }
}

このように、一致の数は考慮されるべきではありません。これで十分だと思いますか?

次に、インデックスを作成する前に、これをデフォルトの類似性アルゴリズムに設定します。

Zend_Search_Lucene_Search_Similarity::setDefault(new MySimilarity());
于 2010-05-12T15:22:25.547 に答える