Con search_api_solr, come posso applicare un significativo boost basato sul campo quando utilizzo solr 6.x?


7

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_searchvalore 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/fieldsfunzionato 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 .

Risposte:


-2

Nessuna delle funzioni API fornite dall'API di ricerca e dall'API di ricerca Solr Drupal funziona correttamente. Puoi controllare i documenti del solarium o tornare a Solr 5 o Solr 4. I boost funzionano correttamente con Solr 5.x. Anche il tipo di dati indicizzato è importante. Prova a indicizzarlo come campo Fulltext.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.