Estoy usando el backend solr para search_api en un sitio drupal 8.
He agregado el valor de un campo de referencia de término de taxonomía ( field_promoted_search
) al índice.
Si un elemento de contenido tiene un field_promoted_search
valor que coincide con el término de búsqueda, me gustaría obtener un impulso significativo (por ejemplo, ^ 1000), empujándolo a la parte superior de los resultados de búsqueda.
Agregar un alto valor de 'impulso' admin/config/search/search-api/index/content/fields
funcionó como se esperaba cuando el servidor estaba usando solr <6, pero desde que se mudó a 6.1.0, esto no funciona como se esperaba. Esto puede deberse a que search_api_solr / solarium está utilizando un impulso multiplicativo en lugar de aditivo . Esto no me parece tan útil, ya que esto multiplica la relevancia lograda por otros campos, en lugar de ser un privilegio exclusivo field_promoted_search
, aunque no estoy seguro de este aspecto.
He intentado agregar una consulta de impulso para este campo de búsqueda promocionado a la consulta de solarium usando hook_search_api_solr_query_alter
. Esto requiere que pase cada clave de búsqueda como una consulta mejorada, y el efecto parece verse afectado por el orden de las claves (y también mi resultado no termina arriba).
$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));
Cuando intento usar una función de impulso , recibo un error de Solr y la consulta no se ejecuta (he intentado varias funciones).
// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");
Cualquier consejo muy apreciado.
Mi referencia para los métodos de impulso aditivo versus multiplicativo es este artículo muy útil .