Saya menggunakan backend solr untuk search_api di situs drupal 8.
Saya telah menambahkan nilai bidang referensi istilah taksonomi ( field_promoted_search
) ke indeks.
Jika suatu item konten memiliki field_promoted_search
nilai yang cocok dengan istilah pencarian, saya ingin mendapatkan peningkatan yang signifikan (mis. ^ 1000), mendorongnya ke bagian atas hasil pencarian.
Menambahkan nilai 'boost' tinggi di admin/config/search/search-api/index/content/fields
berfungsi seperti yang diharapkan ketika server menggunakan solr <6, tetapi sejak pindah ke 6.1.0, ini tidak berfungsi seperti yang diharapkan. Ini mungkin karena search_api_solr / solarium menggunakan dorongan multiplikatif daripada aditif . Bagi saya ini tidak berguna karena ini mengalikan relevansi yang dicapai oleh bidang lain, daripada semata-mata mengistimewakan field_promoted_search
, meskipun saya tidak yakin dengan aspek ini.
Saya telah mencoba menambahkan kueri dorongan untuk bidang pencarian yang dipromosikan ini ke kueri solarium menggunakan hook_search_api_solr_query_alter
. Ini mengharuskan saya untuk melewatkan setiap kunci pencarian sebagai permintaan yang ditingkatkan, dan efeknya tampaknya dipengaruhi oleh urutan kunci (dan juga hasil saya tidak berakhir di bagian atas).
$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));
Ketika saya mencoba menggunakan fungsi boost saja, saya mendapatkan kesalahan dari Solr dan kueri tidak berjalan (saya telah mencoba beberapa fungsi).
// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");
Setiap saran sangat dihargai.
Referensi saya untuk metode boost additive vs multiplicative adalah artikel ini sangat membantu .