私が理解していることから、ドキュメント(特にスコアリング部分) を読んだ後、検索結果をスコアリングする際に、追加するすべてのフィールドの重要性は同じレベルです。私は次のコードを持っています:
protected static $_indexPath = 'tmp/search/indexes/projects';
public static function createSearchIndex()
{
$_index = new Zend_Search_Lucene(APPLICATION_PATH . self::$_indexPath, true);
$_projects_stmt = self::getProjectsStatement();
$_count = 0;
while ($row = $_projects_stmt->fetch()) {
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::text('name', $row['name']));
$doc->addField(Zend_Search_Lucene_Field::text('description', $row['description']));
$doc->addField(Zend_Search_Lucene_Field::unIndexed('projectId', $row['id']));
$_index->addDocument($doc);
}
$_index->optimize();
$_index->commit();
}
コードは単純です。db から取得したデータに基づいてインデックスを生成し、指定した場所に保存します。
私の望ましい行動は、フィールドが(75%と25%としましょうname
)よりも重要であるため、多くの場所を見ていました。description
したがって、あるフレーズを検索すると、それが最初のドキュメントの説明と 2 番目のドキュメントの名前で見つかり、実際には 2 番目のドキュメントのスコアが 3 倍になり、リストの上位に表示されます。
この方法でスコアリング/順序付けを制御する方法はありますか?