Wie kann ich mit search_api_solr bei Verwendung von solr 6.x einen signifikanten feldbasierten Boost anwenden?

7

Ich verwende das Solr- Backend für search_api auf einer Drupal 8-Site.

Ich habe den Wert eines Taxonomiebegriffs Referenzfeld ( field_promoted_search) zum Index hinzugefügt .

Wenn ein Inhaltselement einen field_promoted_searchWert hat, der mit dem Suchbegriff übereinstimmt, möchte ich, dass er einen signifikanten Schub erhält (z. B. ^ 1000) und an die Spitze der Suchergebnisse verschoben wird.

Das Hinzufügen eines hohen 'Boost'-Werts bei admin/config/search/search-api/index/content/fieldsfunktionierte wie erwartet, wenn der Server solr <6 verwendete, aber seit der Umstellung auf 6.1.0 funktioniert dies nicht wie erwartet. Dies kann daran liegen, dass search_api_solr / solarium eher einen multiplikativen Boost als einen additiven verwendet . Dies scheint mir nicht so nützlich zu sein, da dies die Relevanz anderer Bereiche vervielfacht und nicht nur die Privilegierung field_promoted_search, obwohl ich mir über diesen Aspekt nicht sicher bin.

Ich habe versucht , der Solarium-Abfrage mithilfe eine Boost- Abfrage für dieses gesponserte Suchfeld hinzuzufügen hook_search_api_solr_query_alter. Dies erfordert, dass ich jeden Suchschlüssel als verstärkte Abfrage übergebe, und der Effekt scheint von der Reihenfolge der Schlüssel beeinflusst zu werden (und auch mein Ergebnis endet nicht oben).

$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));

Wenn ich versuche, stattdessen eine Boost- Funktion zu verwenden, erhalte ich von Solr einen Fehler von hinten und die Abfrage wird nicht ausgeführt (ich habe mehrere Funktionen ausprobiert).

// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");

Jeder Rat sehr geschätzt.


Meine Referenz für additive und multiplikative Boost-Methoden ist dieser sehr hilfreiche Artikel .

autopoietisch
quelle

Antworten:

-2

Keine der von der Such-API und der Such-API Solr Drupal bereitgestellten API-Funktionen funktioniert ordnungsgemäß. Sie können entweder die Solarium-Dokumente überprüfen oder wieder zu Solr 5 oder Solr 4 wechseln. Boosts funktionieren ordnungsgemäß mit Solr 5.x. Der indizierte Datentyp ist ebenfalls wichtig. Versuchen Sie, es als Volltextfeld zu indizieren.

Gaurav Kapoor
quelle