Estou usando o back-end do solr para search_api em um site drupal 8.
Eu adicionei o valor de um campo de referência do termo de taxonomia ( field_promoted_search
) ao índice.
Se um item de conteúdo tiver um field_promoted_search
valor que corresponda ao termo de pesquisa, gostaria de obter um aumento significativo (por exemplo, ^ 1000), empurrando-o para o topo dos resultados da pesquisa.
A adição de um alto valor de 'boost' admin/config/search/search-api/index/content/fields
funcionou conforme o esperado quando o servidor estava usando solr <6, mas desde a mudança para a 6.1.0, isso não funciona como o esperado. Isso pode ocorrer porque o search_api_solr / solarium está usando um aumento multiplicativo em vez de aditivo . Isso não me parece tão útil quanto isso multiplica a relevância alcançada por outros campos, em vez de apenas privilegiar field_promoted_search
, embora eu não tenha certeza desse aspecto.
Tentei adicionar uma consulta de impulso para esse campo de pesquisa promovido à consulta de solário usando hook_search_api_solr_query_alter
. Isso exige que eu passe cada chave de pesquisa como uma consulta otimizada, e o efeito parece ser afetado pela ordem das chaves (e também meu resultado não acaba no topo).
$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 usar uma função de aumento , recebo um erro de volta do Solr e a consulta não é executada (tentei várias funções).
// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");
Qualquer conselho muito apreciado.
Minha referência para métodos de aumento aditivo vs multiplicativo é este artigo muito útil .