drupal 8サイトでsearch_apiにsolrバックエンドを使用しています。
分類基準の参照フィールド()の値をfield_promoted_search
インデックスに追加しました。
コンテンツのアイテムにfield_promoted_search
検索用語と一致する値がある場合、大幅にブースト(^ 1000など)して、検索結果の上部にプッシュします。
admin/config/search/search-api/index/content/fields
サーバーがsolr <6を使用しているときに期待どおりに高い「ブースト」値を追加すると、6.1.0に移行したため、これは期待どおりに機能しません。search_api_solr /サンが使用しているためと考えられる乗法ブーストではなく、添加物を。これは私にとってはあまり有益ではないように思われます。これは、特権だけではなく、他の分野で達成された関連性を増大させるためfield_promoted_search
です。
を使用して、この昇格された検索フィールドのブーストクエリをソラリウムクエリに追加してみましたhook_search_api_solr_query_alter
。これには、各検索キーをブーストされたクエリとして渡す必要があり、効果はキーの順序によって影響を受けるようです(また、結果が上位になりません)。
$keys = $query->getKeys();
unset($keys['#conjunction']);
// Boost results where search term matches promoted search field.
$boost_keys = [];
$boost_value = 1000;
foreach ($keys as $key) {
$boost_keys[] = '"' . $key . '"^' . $boost_value;
}
$solarium_query->getEDisMax()->setBoostQuery('ss_promoted_search:' . implode(' OR ', $boost_keys));
代わりにboost 関数を使用しようとすると、Solrからエラーが返され、クエリが実行されません(いくつかの関数を試しました)。
// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");
アドバイスは大歓迎です。