Com o search_api_solr, como posso aplicar um aumento significativo baseado em campo ao usar o solr 6.x?

7

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_searchvalor 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/fieldsfuncionou 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 .

autopoiético
fonte

Respostas:

-2

Nenhuma das funções da API fornecidas pela API de pesquisa e pelo Solr Drupal da API de pesquisa funciona corretamente. Você pode verificar os documentos do solário ou voltar ao Solr 5 ou Solr 4. Os aprimoramentos funcionam corretamente com o Solr 5.x. O tipo de dados indexado também é importante. Tente indexá-lo como campo de texto completo.

Gaurav Kapoor
fonte