search_api_solrを使用して、solr 6.xを使用するときに、フィールドベースの重要なブーストを適用するにはどうすればよいですか?


7

drupal 8サイトでsearch_apisolrバックエンドを使用しています。

分類基準の参照フィールド()の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");

アドバイスは大歓迎です。


加法vs乗法のブースト手法についての私の参考資料は、この非常に役立つ記事です。

回答:


-2

Search APIおよびSearch API Solr Drupalが提供するAPI関数はどれも正しく機能しません。ソラリウムのドキュメントを確認するか、Solr 5またはSolr 4に戻すことができます。ブーストはSolr 5.xで正しく動作します。インデックス付きのデータ型も重要です。フルテキストフィールドとしてインデックスを作成してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.