Elasticsearch Python-Client einrichten

In diesem Abschnitt installieren Sie die Elasticsearch-Clientbibliothek für Python und verwenden sie, um eine Verbindung zum Elasticsearch-Dienst herzustellen.

Installation

Die Elasticsearch-Clientbibliothek ist ein Python-Paket, das mit pip installiert wird. Stellen Sie sicher, dass die zuvor erstellte virtuelle Umgebung aktiviert ist, und führen Sie dann den folgenden Befehl aus, um den Client zu installieren:

Um mögliche Inkompatibilitäten zu vermeiden, stellen Sie sicher, dass die Version der Elasticsearch-Clientbibliothek, die Sie installieren, mit der Version des von Ihnen verwendeten Elasticsearch-Stacks übereinstimmt.

Es empfiehlt sich stets, die requirements.txt- Datei mit allen Abhängigkeiten auf dem neuesten Stand zu halten. Daher ist jetzt ein guter Zeitpunkt, diese Datei zu aktualisieren und das neu installierte Paket aufzunehmen. Führen Sie folgenden Befehl in Ihrem Terminal aus:

Mit Elasticsearch verbinden

Um eine Verbindung zu Ihrem Elasticsearch-Dienst herzustellen, muss ein Elasticsearch -Objekt mit den entsprechenden Verbindungsoptionen erstellt werden.

Erstellen Sie eine neue search.py- Datei in Ihrem Code-Editor im Verzeichnis search-tutorial . In der Datei search.py werden alle Suchfunktionen definiert. Der Sinn einer separaten Datei für die Suchfunktion besteht darin, dass Sie diese Datei später einfach extrahieren und in Ihre eigenen Projekte einfügen können.

Fügen Sie folgenden Code in search.py ein, um eine Search -Klasse hinzuzufügen:

Hier gibt es viel zu analysieren. Die load_dotenv() -Funktion, die direkt nach den Importen aufgerufen wird, stammt aus dem Paket python-dotenv . Dieses Paket weiß, wie es mit .env-Dateien umgeht. Dateien, die zur Speicherung von Konfigurationsvariablen wie Passwörtern und Schlüsseln verwendet werden. Die Funktion load_dotenv() liest die in der Datei .env gespeicherten Variablen. Die Dateien werden als Umgebungsvariablen in den Python-Prozess importiert.

Die Klasse Search besitzt einen Konstruktor, der eine Instanz der Clientklasse Elasticsearch erzeugt. Hier befindet sich die gesamte Clientlogik zur Kommunikation mit dem Elasticsearch-Dienst. Bitte beachten Sie, dass diese Zeile derzeit unvollständig ist, da die für Ihren Dienst relevanten Verbindungsoptionen noch hinzugefügt werden müssen. Im Folgenden erfahren Sie, welche Optionen in Ihrem Fall zutreffen. Sobald das Objekt Elasticsearch erstellt wurde, wird es in einer Instanzvariablen namens self.es gespeichert.

Um sicherzustellen, dass das Clientobjekt mit Ihrer Elastic Cloud-Bereitstellung kommunizieren kann, wird die Methode info() aufgerufen. Diese Methode stellt einen Aufruf an den Dienst her, um grundlegende Informationen anzufordern. Wenn dieser Aufruf erfolgreich ist, können Sie davon ausgehen, dass Sie eine gültige Verbindung zum Dienst haben.

Die Methode gibt dann eine Statusmeldung aus, die anzeigt, dass die Verbindung hergestellt wurde, und verwendet anschließend die pprint -Funktion aus Python, um die vom Dienst zurückgegebenen Informationen in einem leicht lesbaren Format anzuzeigen.

HINWEIS: Möglicherweise ist Ihnen aufgefallen, dass das json-Paket aus der Python-Standardbibliothek in dieser Datei importiert, aber nicht verwendet wird. Diese Importanweisung darf nicht entfernt werden, da dieses Paket später noch verwendet wird.

Um den Konstruktor der Klasse Search zu vervollständigen, müssen dem Objekt Elasticsearch die entsprechenden Verbindungsoptionen zugewiesen werden. In den folgenden Unterabschnitten erfahren Sie, welche Optionen Sie für die Installationsmethoden Elastic Cloud und Docker benötigen.

Verbindung zu einer Elastic Cloud-Bereitstellung herstellen

Wenn Sie die Anweisungen zum Erstellen einer Elastic Cloud-Bereitstellung befolgt haben, benötigen Sie die Cloud-ID der Bereitstellung und Ihren API-Schlüssel. Da es sich hierbei um sensible Werte handelt, ist es keine gute Idee, diese direkt in den Anwendungscode aufzunehmen. Erstellen Sie stattdessen eine .env-Datei. (ausgesprochen dot-env) Datei, in der diese Geheimnisse sicher gespeichert werden können.

Öffnen Sie Ihren bevorzugten Code-Editor und erstellen Sie im Projektverzeichnis search-tutorial eine neue Datei mit dem Namen .env. (Vergiss den ersten Punkt nicht). Geben Sie folgenden Inhalt in diese Datei ein:

HINWEIS: Wenn Sie dieses Projekt in ein Versionskontrollsystem einchecken möchten, sollten Sie sicherstellen, dass Sie Ihre .env-Datei nicht einbeziehen. Datei, um zu verhindern, dass Ihre Elastic-Kontodaten kompromittiert werden.

Wenn Sie Git verwenden, fügen Sie die folgende Zeile am Ende Ihrer .gitignore-Datei hinzu. Datei (oder erstellen Sie eine neue Datei, falls noch keine existiert):

Nachdem Sie Ihre Anmeldeinformationen in der .env-Datei eingegeben haben Gehen Sie in search.py zurück zum Konstruktor der Klasse Search und bearbeiten Sie die erste Zeile wie folgt:

Die Werte für die Argumente cloud_id und api_key werden aus der Umgebung extrahiert, die Python im Wörterbuch os.environ verwaltet. Diese Variablen werden aus der .env-Datei gelesen. Die Datei wird von der Funktion load_dotenv() in diesem Wörterbuch gespeichert.

Verbindung zu einem selbstgehosteten Elasticsearch-Docker-Container herstellen

Wenn Sie sich dafür entschieden haben , einen lokal gehosteten Elasticsearch-Dienst mit Docker auszuführen , dann ist die einzige benötigte Verbindungsoption der Verbindungsendpunkt. Bearbeiten Sie die erste Zeile des Search -Klassenkonstruktors in search.py wie folgt:

In dieser Version des Konstruktors wird das Elasticsearch -Objekt mit der URL zum obersten Endpunkt des Elasticsearch-Dienstes instanziiert, der normalerweise http://localhost:9200 lautet. Beachten Sie, dass die Docker-Anleitung die Verschlüsselung und Authentifizierung ausdrücklich deaktiviert, weshalb es nicht erforderlich ist, Anmeldeinformationen anzugeben.

Verbindung testen

An diesem Punkt können Sie eine Verbindung zu Ihrem Elasticsearch-Dienst herstellen. Stellen Sie dazu sicher, dass Ihre virtuelle Python-Umgebung aktiviert ist, und geben Sie dann python ein, um eine interaktive Python-Sitzung zu starten. Sie sollten nun die bekannte Eingabeaufforderung >>> sehen, in die Sie Python-Anweisungen eingeben können.

Importieren Sie die Klasse Search wie folgt:

Als Nächstes instanziieren Sie die neue Klasse:

Sie sollten eine Verbindungsmeldung sehen, gefolgt von den Informationen, die von der info() -Methode des Clients zurückgegeben werden. Abgesehen von Unterschieden bei den Kennungen und Versionsnummern sollte die Ausgabe wie folgt aussehen:

Falls Fehler auftreten, überprüfen Sie, ob Sie die korrekten Anmeldeinformationen in der .env-Datei eingegeben haben. Wenn Sie eine Elastic Cloud-Bereitstellung verwenden, oder im Falle einer selbstgehosteten Bereitstellung, dass Sie den Elasticsearch Docker-Container wie angewiesen auf Ihrem Computer ausführen.

Elasticsearch in die Flask-Anwendung integrieren

Der letzte Schritt in diesem Abschnitt besteht darin, die bisher geleistete Arbeit in die kleine Flask-Anwendung zu integrieren, die Sie zuvor installiert haben. Ziel ist es, dass die Anwendung beim Start automatisch eine Verbindung zu Elasticsearch herstellt.

Um dies zu erreichen, öffnen Sie die Datei app.py in Ihrem Code-Editor. Fügen Sie unterhalb der einzigen vorhandenen Importe eine Importanweisung für das Modul search.py hinzu:

Suchen Sie dann die Zeile, in der die Variable app erzeugt wird, und erzeugen Sie direkt danach eine Instanz der neuen Klasse Search :

Das war's! Die Anwendung verfügt nun bei Bedarf über ein es -Objekt. Wenn Sie die Flask-Anwendung noch in einem Terminal ausführen, sollte die Anwendung neu geladen werden, sobald Sie die Datei speichern. Als Folge des Neuladens sollten die vom Konstruktor der Klasse Search ausgegebenen Verbindungsinformationen erscheinen und werden von nun an bei jedem Neustart der Anwendung angezeigt.

Falls Sie die Flask-Anwendung noch nicht ausgeführt haben, ist jetzt ein guter Zeitpunkt, sie zu starten. Wechseln Sie im Terminalfenster in das Projektverzeichnis, aktivieren Sie die virtuelle Python-Umgebung und starten Sie die Anwendung anschließend mit folgendem Befehl:

Um Ihnen bei der Fehlersuche zu helfen, finden Sie hier eine vollständige Kopie von app.py mit dem integrierten Elasticsearch-Client:

Sind Sie bereit, hochmoderne Sucherlebnisse zu schaffen?

Eine ausreichend fortgeschrittene Suche kann nicht durch die Bemühungen einer einzelnen Person erreicht werden. Elasticsearch wird von Datenwissenschaftlern, ML-Ops-Experten, Ingenieuren und vielen anderen unterstützt, die genauso leidenschaftlich an der Suche interessiert sind wie Sie. Lasst uns in Kontakt treten und zusammenarbeiten, um das magische Sucherlebnis zu schaffen, das Ihnen die gewünschten Ergebnisse liefert.

Probieren Sie es selbst aus