Sto usando il solr backend per search_api su un sito drupal 8.
Ho aggiunto il valore di un campo di riferimento del termine tassonomia ( field_promoted_search
) all'indice.
Se un elemento di contenuto ha un field_promoted_search
valore che corrisponde al termine di ricerca, vorrei che ottenga un incremento significativo (ad esempio ^ 1000), spingendolo in cima ai risultati della ricerca.
L'aggiunta di un alto valore di "boost" ha admin/config/search/search-api/index/content/fields
funzionato come previsto quando il server utilizzava solr <6, ma da quando è passato alla 6.1.0, ciò non funziona come previsto. Ciò può essere dovuto al fatto che search_api_solr / solarium sta usando una spinta moltiplicativa anziché additiva . Questo non mi sembra utile in quanto moltiplica la rilevanza raggiunta da altri campi, piuttosto che privilegiare solo field_promoted_search
, anche se non sono sicuro di questo aspetto.
Ho provato ad aggiungere una query boost per questo campo di ricerca promossa alla query solarium utilizzando hook_search_api_solr_query_alter
. Ciò richiede che passi ciascuna chiave di ricerca come una query potenziata e l'effetto sembra essere influenzato dall'ordine delle chiavi (e anche il mio risultato non finisce in cima).
$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));
Quando tento di utilizzare invece una funzione boost , ricevo un errore da Solr e la query non viene eseguita (ho provato diverse funzioni).
// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");
Qualche consiglio molto apprezzato.
Il mio riferimento per i metodi di incremento additivo vs moltiplicativo è questo articolo molto utile .