Drupal 8: Eine View mit Search API konfigurieren

Gespeichert von admin am 27.09.2019 - 10:43

Die mitgelieferte Suche von Drupal ist nicht immer die beste Wahl.

Wesentlich mehr Möglichkeiten bietet die Kombination der Module Search API und Search API Pages https://www.drupal.org/project/search_api_page.

Aber selbst diese Kombination lässt noch Wünsche übrig.
So sieht z.B. die Suchergebnis-Seite nicht so toll aus und der Link auf dem Node-Titel führt nicht – wie man eigentlich erwarten würde – zu selbigem.

Deshalb habe ich mich heute mit der Integration dieser Search API in die Drupal-Views beschäftigt und halte die notwendigen Schritte hier gleich mal fest.

Man muss sich vor Augen halten, dass die Kombination ungemein viele Möglichkeiten der Konfiguration bietet und man muss sich im Vorfeld diverse Fragen beantworten, um sich nicht zu verlaufen.
Bevor wir die Schritte im Detail durchgehen, hier die Fragen, die sich stellen und die Antworten, auf die sich dieser Artikel bezieht:
 

  1. Arbeiten wir mit einer Datenbank Suche oder verwenden wir Apache Solr ?
    Letzteres bietet sich für Systeme mit hohem Anspruch an die Performance an.
    Hier wird die Suche mit der integrierten Database Search beschrieben.
     

  2. In welchem Inhalt soll gesucht werden?
    Nodes oder User wären die Default Werte und dann kann man noch einen oder mehrere Content-Typen wählen.
    In der View vom Typ Search-Index kann später kein Filter auf einen Content-Typ gesetzt werden.
    Wir müssen also im Vorfeld überlegen, für welche Inhalte unsere View funktionieren soll und dafür einen Such-Index erstellen.
    In unserem Fall konfigurieren wir einen Suchindex für einen Content-Typ.
    Es wäre aber auch möglich, die Suche über mehrere Content-Typen zu erstellen
     

  3. Welche Ansicht soll die View haben?
    Einfach wäre eine View, die nur eine Liste mit den Titeln ausgibt, z.B. als Ergebnis-Liste einer bestimmten Suche.
    Diese View könnte man als Block zur Verfügung stellen und hätte einen Ersatz für das Core-Suchformular.
    In unserem Fall soll aber eine View erstellt werden, die einen bestimmten Display-Mode eines Nodes ausgibt und es soll in allen Feldern dieses Display-Modes gesucht werden.
    Im Beispiel verwenden wir den mitgelieferten Display-Mode "Vollständiger Inhalt".
     

Das nur der Vollständigkeit halber, damit Euch klar ist, dass es unendlich viele Alternativen zu den hier vorgestellten Schritten gibt.
In den Tutorials wird meistens der Fall beschrieben, dass die View sich auf Felder und nicht auf geränderte Entities bezieht.

Da es hier einen ganz bestimmten Fallstrick gibt, zeige ich Euch den Anwendungsfall mit dem Display-Mode "Vollständiger Inhalt".

Das Modul Search API Pages brauchen wir in dem Fall nicht, es wird durch die View ersetzt.
 

  1. Schritt: Wir installieren wie üblich das Modul Search API.
    Danach können wir es hier konfigurieren: admin/config/search/search-api
    Die Core-Search sollte man aus Performance-Gründen nicht parallel aktivieren.
     

  2. Schritt: Wir legen mit dem Button "Add Server" einen Database Search Sever an.
    Die Auswahl ist hier eingeschränkt, weil kein anderer Server (Solr oder ähnliches) konfiguriert wurde.
    Aber man kann gewisse Voreinstellungen treffen, z.B. über die erforderliche Länge der Suchbegriffe.
    Das ist aus Performancegründen wichtig und sollte mindestens drei Buchstaben umfassen.
    Ich gebe auch jeweils an, dass Teile von Worten erlaubt sind.
     
    Server für Drupal 8 Search API konfigurieren
     

  3. Schritt: mit "Add Index" erstellen wir den speziellen Index, auf den die Such-View später zugreift:
    Zur Erinnerung: die View bezieht sich auf EINEN Such-Index.
    Benötigen wir Views auf unterschiedliche Contente, so ist jeweils ein extra Such-Index zu konfigurieren.
    Analog zu oben beschriebenen Vorentscheidungen, sucht unser Index nur im Content eines bestimmten Typs.
     

    Search API Index für Drupal 8 Suche anlegen
     
    Außerdem wird ausgewählt, welcher Suchserver zum Einsatz kommen soll.
    In unserem Fall gibt es nur einen – den zuvor angelegten "myserver".

    Wir wählen den Typ des Inhalts aus:
     
    Content-Typ bei Search API Index für Drupal 8 Suche auswählen
     

    Unter "Index Options" kann man angeben, wie viele Einträge pro Batch-Lauf (Cron) gemacht werden sollen.
    Bei Performance-Problemen muss dieser Wert gesenkt werden und dann entsprechend oft indexiert werden, bis der Index vollständig ist.

  4. Schritt: Unter dem Reiter Fields kann die Art der Ansicht bestimmt werden.
    Wir erinnern uns, dass wir den Display-Mode "Vollständigen Inhalt" für diese View verwenden möchten.
    Dann muss das auch hier unter "Add Fields" so ausgewählt werden:

    Da wir nur einen Content-Typ verwenden, brauchen wir nicht unterschiedliche Typen unterschiedlich konfigurieren,
    sondern fügen hier Rendered HTML Output hinzu.
     
    Fields für Search API Index Drupal 8 anlegen

     

    Nach dem Abspeichern des neuen Fields müssen wir noch den Mode auswählen:
    In unserem Fall "Full Content".
     
    Field Display-Mode bei Search API Index für Drupal 8 Suche auswählen
     
    Unter dem Reiter Verarbeitung kann man noch viele Einstellungen machen - dazu später.
     

  5. Schritt: Führe den Cron aus
    Der Cron baut den Index auf.
     

  6. Schritt: Wir legen eine View mit diesem neuen Search-Index an.
    Ich habe ihn 'Szene' genannt, weil er nur Inhalte eines gleichnamigen Node-Typs durchsucht.

    Unter "Ansicht hinzufügen" treffen wir folgende Auswahl:
     
    Neue View vom Typ Search API
     

    Wenn man beim Anlegen der Search-View verpasst, unter Seitenanzeigen von Feldern auf geränderte Entität umzustellen, dann läuft man in oben angedeutetes Problem:
    Im Bearbeitungs-Modus wird u.U. Unter Ansicht: Felder erst mal nicht die Option "geränderte Entität" angezeigt.
    Man muss dann erst den Cache löschen und die View neu aufrufen.

    Ich konnte das Problem in einem andere Fall nicht wieder sehen.
    Evt. weil ich da frisch den Index erzeugt hatte. Das soll auch Abhilfe schaffen.

    Falls Ihr in diesen Fall läuft: Die Abhilfe war hier beschrieben:
    https://drupal.stackexchange.com/questions/165410/display-mode-for-search-api-users-index
     

  7. Schritt: Editieren der View:
    Unter Anzeige: Felder stellen wir um auf "geränderte Entität":
     
    Geränderte Entität auswählen statt Fields bei View vom Typ Search API
     

    Danach kann man unter Einstellungen die Auswahl bezüglich View-Mode treffen:

    In unserem Fall ist es einfach, weil wir nur einen Content haben.
    Man kann erahnen, welche Vielfalt an Kombinationen entsteht, wenn die Suche über mehrere Inhaltstypen oder gar über Nodes UND User läuft.
     
    View Mode der geränderten Entität in der View vom Typ Search Index anlegen
     
    Bitte bedenke, dass die Auswahlmöglichkeiten für den View-Mode nur zur Verfügung stehen, wenn man beim Such-Index namens "Szene" die Einstellungen korrekt gemacht hat.
    Andernfalls sucht man in der View die Einstellungen vergeblich.

    Ebenso ergeht es mit den Filtern, die zur Verfügung stehen:
    Hat man für den Such-Index noch keinen Cronlauf gemacht, der den Index aufgebaut hat, dann fehlt u.a. der Filter über Fulltext-Search, den wir hier hinzufügen:
     
    Filter Full Text bei View vom Typ Search Index 

     
    Die anderen Filter müsst Ihr im Detail ausprobieren.
    Ich habe auch noch nicht damit experimentiert.

    Hier kann man dann noch mal angeben, dass das gesuchte Wort mindesten 3 Buchstaben haben muss.
    Wir stellen den Filter auf hervorgehoben, weil er ja den Unsern angezeigt werden soll:
     
    Hervorgehobener Filter bei View vom Typ Search Index
     
     

  8. Schritt: Testen als Gast

    Dazu bitte nicht vergessen, die Berechtigungen für Verwendung der search-api zu setzen.

    Wir rufen also die Page-View auf und sehen oben unseren hervorgehoben Filter und darunter alle Einträge, weil selbiger leer ist.

    Der erste Versuch findet leider – gar nichts.
    Ich habe den Cron noch mal laufen lassen UND unter der Konfiguration des entsprechenden search-Index diesen noch mal aufbauen lassen.

    Das läuft über den Reiter "View" und sieht dann so aus:
     
     
    Search API Index neu aufbauen
     

    Den Cronlauf muss man nach Erstellen des neuen Index u.U. mehrmals wiederholen.
    Zwar sind bei obigem Beispiel nur drei Items (Nodes vom zugelassenen Typ) indexiert, aber sie haben sehr viele Worte und zugelassen sind ja nur 500 pro Batch. Das ist nicht viel.

    Solange keine Last auf der Seite ist, kann man statt 500 auch -1 eintragen, dann werden alle Worte bei einem Cronlauf aufgenommen.

  9. Schritt: Feinheiten konfigurieren

    Unter dem Reiter Verarbeitung beim Search-Index habe ich im ersten Schritt folgende Einstellungen vorgenommen:
     
    Feinheiten konfigurieren unter Search API Index Verarbeitung
     

    Hier muss man sich ran tasten und auch mit den vielen verschiedenen Einstellungen spielen, bis das Ergebnis wirklich befriedigend ist.
    z.B. sollte man auch nicht veröffentlichte Entities von der Indexierung ausnehmen (erster Haken).
    Das habe ich bei mir inzwischen noch ergänzt.
     

P.S. Highlight wird leider nicht unterstützt, wenn man Geränderte Entities verwendet, statt Feldern.