Solr Search API - Inhaltstyp bevorzugt anzeigen (Type Biasing Search API Solr)

Ich bin in einem Projekt gerade vom ApacheSolr-Modul zum Modul Search API Solr gewechselt.

Bei ApacheSolr gibt es die Option "Type Biasing" mit der man einzelnen Inhaltstypen eine höhere Gewichtung geben kann. Eine ähnliche Funktion konnte ich bei Search API Solr bislang nicht entdecken. Gemäß diesem Thread https://www.drupal.org/node/2154567 gibt es die Funktion im Standard von Search API solr auch nicht. In diesem Thread gibt drunken_monkey aber den Tip wie dies zu lösen ist.

Da ich genau einen Content-Type immer bevorzugt behandeln wollte habe ich den Boost Query Parameter (bq) in der Solr Query über den hook hook_search_api_solr_query_alter ergänzt. Dieser weist den Suchergebnissen für den gewünschten Typ einen entsprechenden Zuschlag bei der Score zu. Ich bin auf "200" gegangen, da sonst nicht immer gewährleistet war, dass die Ergebnisse des gewünschten Content Types tatsächlich vorne landeten.

Das Feld Inhaltstype (type) muss im Index auch indiziert werden (admin/config/search/search_api/index/indexmachinename/fields).

Der Paramter bq verändert nicht die gefundenen Elemente der Suche sondern nur deren Wertigkeit (Score). Die Ergebnisse vom gewünschten Inhaltstyp erhalten also einen Zusatzscore von 200.

/**
*
* implements hook_search_api_solr_query_alter
*/
function mymodule_search_api_solr_query_alter(array &$call_args, SearchApiQueryInterface $query)
{
  $call_args['params']['bq'] = 'ss_type:special_contenttype^200';
}

Es ist sicherlich eine ausgefeiltere Umsetzung je nach Anwendungsfall denkbar. Für meinen Fall reichte hier zunächst diese Variante "Quick and dirty".

Neuen Kommentar schreiben

Filtered HTML

  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • To post pieces of code, surround them with <code>...</code> tags. For PHP code, you can use <?php ... ?>, which will also colour it based on syntax.

Plain text

  • Keine HTML-Tags erlaubt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.