Direkt zum Inhalt
Bild
blog-banner-opensenselabs%20%282%29_1.jpg

Verleihen Sie Ihrer Drupal-Suche mit Elasticsearch mehr Power

AI-Translated
article publisher

Raman

Drupal

Von modernen Anwendungen wird erwartet, dass sie mit leistungsstarken Suchmaschinen ausgestattet sind. Drupal bietet ein Kernsuchmodul, das in der Lage ist, eine einfache Stichwortsuche durch Abfragen der Datenbank durchzuführen. Wenn es um das Speichern und Abrufen von Daten geht, sind Datenbanken sehr effizient und zuverlässig. Sie können auch für die einfache Filterung und Aggregation von Daten verwendet werden. Sie sind jedoch nicht sehr effizient, wenn es um die Suche nach bestimmten Begriffen und Phrasen geht.

Dateireihe mit Lesezeichen


Die Durchführung ineffizienter Abfragen auf großen Datenmengen kann zu einer schlechten Leistung führen. Was aber, wenn wir die Suchergebnisse nach ihrer Relevanz sortieren, fortgeschrittene Suchtechniken wie Autovervollständigung, Volltext-, Fuzzy-Suche implementieren oder die Suche mit RESTful APIs integrieren wollen, um eine entkoppelte Anwendung zu erstellen?

Hier kommen dedizierte Suchserver ins Spiel. Sie bieten eine robuste Lösung für all diese Probleme. Es gibt einige beliebte Open-Source-Suchmaschinen zur Auswahl, wie z. B. Apache Solr, Elasticsearch und Sphinx. Wann welche verwendet werden sollte, hängt von Ihren Bedürfnissen und Ihrer Situation ab und ist eine Diskussion für einen anderen Tag. In diesem Artikel werden wir untersuchen, wie wir Elasticsearch für die Indizierung in Drupal verwenden können.

Was ist Elasticsearch?

"Elasticsearch ist eine hochskalierbare Open-Source-Volltextsuch- und -Analyse-Engine. Sie ermöglicht es Ihnen, große Datenmengen schnell und nahezu in Echtzeit zu speichern, zu durchsuchen und zu analysieren." – elastic.co 

Es handelt sich um einen Suchserver, der mit Apache Lucene, einer Java-Bibliothek, erstellt wurde und mit dem fortgeschrittene Suchtechniken implementiert und Analysen auf großen Datenmengen durchgeführt werden können, ohne die Leistung zu beeinträchtigen.

"You Know, for Search" (frei übersetzt: "Sie wissen schon, für die Suche")

Es handelt sich um eine dokumentenorientierte Suchmaschine, d. h. sie speichert und fragt Daten im JSON-Format ab. Sie bietet auch eine RESTful-Schnittstelle zur Interaktion mit der Lucene-Engine. 

Viele beliebte Communities, darunter Github, StackOverflow und Wikipedia, profitieren von Elasticsearch aufgrund seiner Geschwindigkeit, verteilten Architektur und Skalierbarkeit.

Herunterladen und Ausführen des Elasticsearch-Servers

Bevor wir Elasticsearch in Drupal integrieren, müssen wir es auf unserem Rechner installieren. Da es Java benötigt, stellen Sie sicher, dass Java 8 oder höher auf dem System installiert ist. Außerdem unterstützt das Drupal-Modul derzeit die Version 5 von Elasticsearch, also laden Sie dieselbe herunter.

  • Laden Sie das Archiv von der Website herunter und entpacken Sie es.
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.10.tar.gz
$ tar -zxvf elasticsearch-5.6.10.tar.gz
  • Führen Sie das "elasticsearch"-Bash-Skript aus, das sich im bin-Verzeichnis befindet. Wenn Sie Windows verwenden, führen Sie die Batch-Datei "elasticsearch.bat" aus.
$ elasticsearch-5.6.10/bin/elasticsearch

Der Suchserver sollte standardmäßig auf Port 9200 von localhost gestartet werden. Um sicherzustellen, dass er korrekt eingerichtet wurde, stellen Sie eine Anfrage an http://localhost:9200/ 

$ curl http://localhost:9200

Wenn Sie die folgende Antwort erhalten, können Sie loslegen.

{
  "name" : "hzBUZA1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "5RMhDoOHSfyI4a9s78qJtQ",
  "version" : {
    "number" : "5.6.10",
    "build_hash" : "b727a60",
    "build_date" : "2018-06-06T15:48:34.860Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

Da Elasticsearch standardmäßig keine Zugriffskontrolle durchführt, müssen Sie sich bei der Bereitstellung darum kümmern.

Integrieren von Elasticsearch in Drupal

Nachdem der Suchserver nun eingerichtet ist und läuft, können wir mit der Integration in Drupal fortfahren. In D8 kann dies auf zwei Arten geschehen (es sei denn, Sie erstellen natürlich Ihre eigene benutzerdefinierte Lösung).

  1. Verwenden von Search API und Elasticsearch Connector
  2. Verwenden des Elastic Search Moduls

Methode 1: Verwenden von Search API und Elasticsearch Connector

Wir benötigen die folgenden Module.

Wir benötigen jedoch auch zwei PHP-Bibliotheken, damit es funktioniert – des-connector und php-lucene. Lassen Sie uns diese mit Composer herunterladen, da dieser sich um die Abhängigkeiten kümmert.

$ composer require 'drupal/elasticsearch_connector:^5.0'
$ composer require 'drupal/search_api:^1.8'

Aktivieren Sie nun die Module entweder mit der Drupal-Konsole, Drush oder über die Admin-UI.

$ drupal module:install elasticsearch_connector search_api

oder

$ drush en elasticsearch_connector search_api -y

Sie können überprüfen, ob die Bibliothek korrekt installiert wurde, indem Sie die Statusberichte unter admin/reports/status aufrufen.

Status der Bibliothek unter Statusberichte
Anzeigen des Status der Bibliothek unter Statusberichte

Konfigurieren des Elasticsearch Connectors

Nun müssen wir einen Cluster (Sammlung von Knotenservern) erstellen, in dem alle Daten gespeichert oder indiziert werden.

  1. Navigieren Sie zu Verwalten → Konfiguration → Suche und Metadaten → Elasticsearch Connector und klicken Sie auf die Schaltfläche "Cluster hinzufügen".
  2. Füllen Sie die Details des Clusters aus. Geben Sie einen Admin-Titel an, geben Sie die Server-URL ein, machen Sie ihn optional zum Standard-Cluster und stellen Sie sicher, dass der Status auf Aktiv gesetzt ist.
    Hinzufügen eines Elasticsearch Clusters
    Hinzufügen eines Elasticsearch Clusters
  3. Klicken Sie auf die Schaltfläche "Speichern", um den Cluster hinzuzufügen.

Hinzufügen eines Search API Servers

In Drupal ist die Search API für die Bereitstellung der Schnittstelle zu einem Suchserver verantwortlich. In unserem Fall ist es Elasticsearch. Wir müssen den Search API Server auf den kürzlich erstellten Cluster verweisen lassen.

  1. Navigieren Sie zu Verwalten → Konfiguration → Suche und Metadaten → Search API und klicken Sie auf die Schaltfläche "Server hinzufügen".
  2. Geben Sie dem Server einen passenden Namen und eine Beschreibung. Wählen Sie "Elasticsearch" als Backend und passen Sie optional die Unschärfe an.
    Hinzufügen eines Search API Servers
    Hinzufügen eines Search API Servers
  3. Klicken Sie auf "Speichern", um den Server hinzuzufügen.
    Anzeigen des Status des neu hinzugefügten Servers
    Anzeigen des Status des neu hinzugefügten Servers

Erstellen eines Search API Index und Hinzufügen von Feldern

Als Nächstes müssen wir einen Search API Index erstellen. Die hier verwendeten Begriffe können etwas verwirrend sein. Der Search API Index ist im Grunde ein Elasticsearch-Typ (und kein Elasticsearch-Index). 

  1. Klicken Sie auf derselben Konfigurationsseite auf die Schaltfläche "Index hinzufügen".
  2. Geben Sie dem Index einen administrativen Namen. Wählen Sie die Entitäten in den Datenquellen aus, die Sie indizieren müssen.
    Hinzufügen der Datenquellen des Suchindex
    Hinzufügen der Datenquellen des Suchindex
  3. Wählen Sie die zu indizierenden Bundles und die Sprache aus, während Sie die Datenquelle konfigurieren, und wählen Sie auch die Indizierungsreihenfolge aus.
    Konfigurieren der hinzugefügten Datenquellen
    Konfigurieren der hinzugefügten Datenquellen
  4. Wählen Sie als Nächstes den Search API Server aus, aktivieren Sie "Aktiviert". Möglicherweise möchten Sie die sofortige Indizierung deaktivieren. Klicken Sie dann auf "Speichern und Felder hinzufügen".
    Konfigurieren der Suchindexoptionen
    Konfigurieren der Suchindexoptionen
  5. Nun müssen wir die zu indizierenden Felder hinzufügen. Diese Felder werden zu den Feldern der Dokumente in unserem Elasticsearch-Index. Klicken Sie auf die Schaltfläche "Feld hinzufügen".
  6. Klicken Sie auf die Schaltfläche "Hinzufügen" neben dem Feld, das Sie hinzufügen möchten. Fügen wir den Titel hinzu und klicken Sie auf "Fertig".
    Hinzufügen der erforderlichen Felder zum Index
    Hinzufügen der erforderlichen Felder zum Index
  7. Konfigurieren Sie nun den Typ des Feldes. Dies kann je nach Anwendung variieren. Wenn Sie eine Suchfunktion implementieren, sollten Sie "Volltext" auswählen.
    Anpassen der Felder des Index
    Anpassen der Felder des Index
  8. Klicken Sie abschließend auf "Änderungen speichern".

Verarbeitung von Daten

Dies ist ein wichtiges Konzept für die Funktionsweise einer Suchmaschine. Wir müssen bestimmte Operationen an Daten durchführen, bevor wir sie in den Suchserver indizieren. Betrachten Sie zum Beispiel die Implementierung einer einfachen Volltext-Suchleiste in einer Ansicht oder einer entkoppelten Anwendung. 

  1. Um dies zu implementieren, klicken Sie auf die Registerkarte "Prozessoren". Aktivieren Sie die folgenden Optionen und ordnen Sie sie in dieser Reihenfolge an.
    1. Tokenisierung: Teilen Sie den Text in Token oder Wörter auf.
    2. Kleinschreibung: Ändern Sie die Groß- und Kleinschreibung aller Token in Kleinbuchstaben.
    3. Entfernen von Stoppwörtern: Entfernen Sie die Füllwörter wie "ist", "der", "war" usw.
    4. Stemming: Schneiden oder modifizieren Sie das Ende von Wörtern wie "-ing", "-uous" usw.

      Zusammen mit diesen Schritten können Sie die Überprüfung des Inhaltszugriffs, den Veröffentlichungsstatus der Entität und die Ergebnis-Hervorhebung aktivieren.
  2. Scrollen Sie nach unten, ordnen Sie die Reihenfolge an und aktivieren Sie alle Prozesse über ihre einzelnen vertikalen Registerkarten.
    Anordnen der Reihenfolge der Prozessoren
    Anordnen der Reihenfolge der Prozessoren
  3. Klicken Sie auf "Speichern", um die Konfiguration zu speichern.

Beachten Sie, dass die Prozesse, die angewendet werden müssen, je nach Anwendung variieren können. Sie sollten zum Beispiel die Stoppwörter nicht entfernen, wenn Sie die Autovervollständigung implementieren wollen.

Indizieren der Inhaltselemente

Standardmäßig erledigt der Drupal-Cron die Indizierung, wann immer er ausgeführt wird. Aber vorerst wollen wir die Elemente manuell über die Registerkarte "Ansicht" indizieren.

Indizieren der Inhaltselemente
Indizieren der Inhaltselemente

Ändern Sie optional die Batch-Größe und klicken Sie auf die Schaltfläche "Jetzt indizieren", um die Indizierung zu starten.

Warten Sie, bis die Indizierung abgeschlossen ist
Warten Sie, bis die Indizierung abgeschlossen ist

Nun können Sie den erstellten Index über die REST-Schnittstelle oder einen Client wie Elasticsearch Head oder Kibana anzeigen oder durchsuchen. 

$ curl http://localhost:9200/elasticsearch_drupal_content_index/_search?pretty=true&q=*:*
Erstellen einer Ansicht mit Volltextsuche
Erstellen einer Ansicht mit Volltextsuche

Sie können eine Ansicht mit dem Suchindex erstellen oder die REST-Schnittstelle von Elasticsearch verwenden, um eine entkoppelte Anwendung zu erstellen.

Beispiel für eine Volltextsuche mit Drupal-Ansicht
Beispiel für eine Volltextsuche mit Drupal-Ansicht

Methode 2: Verwenden des Elastic Search Moduls

Wie Sie vielleicht bemerken, gibt es eine Menge terminologischer Diskrepanzen zwischen der Search API und den Kernkonzepten von Elasticsearch. Daher können wir alternativ diese Methode verwenden.

Dazu benötigen wir das Elastic Search Modul und 3 PHP-Bibliotheken – elasticsearch, elasticsearch-dsl und twlib. Laden wir das Modul mit Composer herunter.

$ composer require 'drupal/elastic_search:^1.2'

Aktivieren Sie es nun entweder mit der Drupal-Konsole, Drush oder über die Admin-UI.

$ drupal module:install elastic_search

oder

$ drush en elastic_search -y

Verbinden mit dem Elasticsearch Server

Zuerst müssen wir das Modul mit dem Suchserver verbinden, ähnlich wie bei der vorherigen Methode.

  1. Navigieren Sie zu Konfiguration → Suche und Metadaten → Elastic Server.
  2. Wählen Sie das HTTP-Protokoll aus, fügen Sie den Elastic-Search-Host und die Portnummer hinzu und fügen Sie optional den Kibana-Host hinzu. Sie können auch ein Präfix für Indizes hinzufügen. Die restlichen Konfigurationen können auf den Standardwerten belassen werden.
    Hinzufügen des Elasticsearch Servers
    Hinzufügen des Elasticsearch Servers
  3. Klicken Sie auf "Konfigurationen speichern", um den Server hinzuzufügen.

Generieren von Mappings und Konfigurieren derselben

Ein Mapping ist im Wesentlichen ein Schema, das die Felder der Dokumente in einem Index definiert. Alle Bundles von Entitäten in Drupal können in Indizes abgebildet werden.

  1. Klicken Sie auf "Mappings generieren".
  2. Wählen Sie den Entitätstyp aus, z. B. Node. Wählen Sie dann seine Bundles aus. Erlauben Sie optional die Abbildung seiner Kinder.
    Hinzufügen der Entität und Auswählen der abzubildenden Bundles
    Hinzufügen der Entität und Auswählen der abzubildenden Bundles
  3. Klicken Sie auf die Schaltfläche "Senden". Es werden automatisch alle Felder hinzugefügt, Sie sollten nur die gewünschten Felder behalten und diese korrekt konfigurieren. Ihr Mapping-DSL kann ebenfalls exportiert werden.
    Konfigurieren der Felder eines Bundles
    Konfigurieren der Felder eines Bundles

Generieren eines Index und Pushen der Dokumente

Nun können wir die Indizes und die erforderlichen Dokumente auf den Suchserver pushen.

  1. Gehen Sie dazu zur Registerkarte "Indizes", klicken Sie auf "Neue Elastic Search Indizes generieren" und dann auf "Serverindizes und Mappings pushen". Dadurch werden alle Indizes auf dem Server erstellt.
  2. Indizieren Sie nun alle Nodes mit "Alle Dokumente pushen". Sie können die Nodes auch für einen bestimmten Index pushen. Warten Sie, bis die Indizierung abgeschlossen ist.
    Verwalten der Indizes über die Admin-UI
    Verwalten der Indizes über die Admin-UI

Fazit

Drupal-Entitäten können in die Elasticsearch-Dokumente indiziert werden, die verwendet werden können, um ein fortgeschrittenes Suchsystem mit Drupal-Ansichten zu erstellen, oder um eine entkoppelte Anwendung mit der REST-Schnittstelle von Elasticsearch zu erstellen. 
Während die Search API einen abstrakten Ansatz bietet, folgt das Elastic Search Modul den Konventionen und Prinzipien der Suchmaschine selbst, um die Dokumente zu indizieren. So oder so können Sie die Flexibilität, Leistung und Geschwindigkeit von Elasticsearch genießen, um Ihre gewünschte Lösung zu erstellen.

Abonnieren

Ready to start your digital transformation journey with us?

Verwandte Blogs

Zurück von der DrupalCon Atlanta 2025: Ein Meilenstein für OpenSense Labs

DrupalCon Atlanta 2025 OpenSense Labs

„Fit. Schnell. Für die Ewigkeit gebaut.“ Das war nicht nur ein Slogan, sondern die Denkweise, mit der wir zur DrupalCon…

Erklärbare KI-Tools: SHAPs Stärke in der KI

Explainable AI tools Explainable AI And SHAP OpenSense Labs

Wissen Sie, was erklärbare KI-Tools sind? Erklärbare KI-Tools sind Programme, die zeigen, wie eine KI ihre Entscheidungen…

KI-Chatbots: Präzision und Persönlichkeit in Perfektion

Creating AI Chatbot OpenSense Labs

In der Welt der künstlichen Intelligenz ist die Entwicklung eines KI-Chatbots, der nicht nur akkurate Informationen liefert…