web-dev-qa-db-ja.com

Drupal + Solr、カスタムノードの重みに基づいて結果をブースト

ApacheSolr検索モジュールでDrupal 6を使用しています。

私のWebサイトでは、すべての訪問者が「探していたものは見つかりましたか?」という質問に「はい」または「いいえ」で回答するノードにフラグを付けることができます。これらの回答に基づいて、個別のDBテーブルに格納されている各ノードのカスタムランキングスコアを計算します。

次に、Solrで検索結果をソート/ブーストするときにこのスコアを含めて、関連性/スコアが最も高いノードが上位に表示されるようにします。

Hook_apachesolr_prepare_query()でそれを達成できますか?

すべての提案は大歓迎です:)

1
hampusohlsson

スコアを並べ替えオプションとして提供するには、それをprepare_queryフックに追加します。

function mymodule_apachesolr_prepare_query(&$query, &$params, $caller) {
  $query->set_available_sort('field_score', array('title' => t('Score'), 'default' => 'desc'));
}

それによってブーストするには、次のいずれかを行う必要があります。

  • [サイトの設定]-> [Apachesolr]-> [検索]フィールドに移動し、スコアフィールドが表示される場合は、他のすべてのフィールドよりも大きな値を指定して、最も関連性の高いものにします。

  • フィールドが表示されない(タイプが表示されない場合がある)か、より詳細な制御が必要な場合(すべてのクエリでブースト値を計算するなど)、次のようにmodify_queryフックにブーストを追加できます:$params['qf'][] = 'field_score^10';

2
Alexandru Badiu