9

Solrのブールフィールドをブーストして、より高いスコアを獲得することは可能ですか?

次のようなインデックスがあります。

  • ドキュメント ID
  • 題名
  • 説明
  • キーワード
  • is_reviewed

検索の際、レビューされた (つまり is_reviewed = true) ドキュメントは、完全に除外するのではなく、レビューされていないドキュメントよりも重み付けする必要があります。

を使用is_review:true^100してもうまくいかないようで、未レビューのアイテムに低い重みを与えるのではなく、それらを除外します。これを達成できる別の方法があれば?ありがとう!

4

2 に答える 2

10

一部のクエリ パーサーには、この種の使用に特化した機能があります。たとえば、dismax クエリ パーサーにはブースト クエリbqがあり、元のクエリに句を追加することで、クエリに一致するドキュメントをブーストできます。スコアに関数の結果を掛けることができるブースト機能bfもあります。たとえば、is_reviewこのbfパラメータとして使用すると、

  • フィールドが定義されていないすべてのドキュメントのスコアにはis_review0 が掛けられます。
  • is_review=falseが1倍になるように、すべてのドキュメントのスコア。
  • is_review=trueが 2 倍になるすべてのドキュメントのスコア。

is_review:true^100デフォルトのクエリ演算子ANDとして使用していない限り、レビューされていないアイテムを除外しないでください。この場合、 で置き換えてみてください。is_review:true^100(is_review:true^100 OR is_review:false^0)

dismax クエリ パーサーのブースト機能に興味があるが、デフォルトのクエリ パーサーに固執したい場合は、任意のクエリのスコアを任意の関数で乗算できるブースト クエリ パーサーを使用できます。

于 2012-04-11T21:30:02.130 に答える
4

Drupal

Drupal CMS を使用している場合の解決策は次のとおりです。

まず、/solr/admin/schema.jsp の Schema Browser でフィールド名を見つけます。

次に、使用するモジュールに応じて、次の例を試してください。

Apachesolr モジュール

コード例:

/**
 * Implements hook_apachesolr_query_alter().
 */
function hook_apachesolr_query_alter(DrupalSolrQueryInterface $query) {
  $query->addParam('bq', array('is_review' =>
    '(is_review:true^100 OR is_review:false^0)'
  ));
}

Solr API モジュールの検索

コード例:

/**
 * Implements hook_search_api_solr_query_alter().
 */
function hook_search_api_solr_query_alter(&$call_args, SearchApiQueryInterface $query) {
  $call_args['params']['bq'][] = '(is_review:true^100 OR is_review:false^0)';
}
于 2013-01-14T17:16:59.207 に答える