Elasticsearch-Client für JavaScript (Node.js) — @elastic/elasticsearch
\n\nElasticsearch ist ein leistungsstarkes verteiltes Such- und Analysesystem, das auf Apache Lucene basiert. Es ermöglicht Volltextsuche, Datenaggregation und Log-Analyse in Echtzeit. Für die Interaktion mit Elasticsearch aus Node.js-Anwendungen gibt es den offiziellen Client — @elastic/elasticsearch. Er bietet eine praktische API für alle Operationen: von der Verbindung zum Cluster bis hin zu komplexen Suchabfragen.
Die Bibliothek unterstützt vollständig alle Versionen von Elasticsearch 7.x und 8.x, arbeitet asynchron mit Promises und ist ideal für den Aufbau hochbelasteter Such-, Analyse- und Überwachungsdienste. In diesem Artikel betrachten wir die Installation, grundlegende Konfiguration und die wichtigsten Datenoperationen am Beispiel von Node.js.
\n\nInstallation und Verbindung
\n\nDie Installation des Clients erfolgt über den Paketmanager npm:
\n\nnpm install @elastic/elasticsearch\n\nNach der Installation muss eine Client-Instanz erstellt werden, wobei die Adresse des Elasticsearch-Servers und gegebenenfalls Authentifizierungsparameter angegeben werden:
\n\nconst { Client } = require('@elastic/elasticsearch');\n\nconst client = new Client({\n node: 'http://localhost:9200',\n auth: {\n username: 'elastic',\n password: 'changeme'\n }\n});\n\nFür die Arbeit mit dem Cloud-Dienst Elastic Cloud werden die Parameter cloud.id und auth.apiKey verwendet.
Arbeit mit Indizes
\n\nEin Index in Elasticsearch ist das Äquivalent einer Datenbank in relationalen DBMS. Betrachten wir die grundlegenden Operationen.
\n\nIndex erstellen
\n\nasync function createIndex() {\n const response = await client.indices.create({\n index: 'products',\n body: {\n settings: {\n number_of_shards: 1,\n number_of_replicas: 1\n },\n mappings: {\n properties: {\n title: { type: 'text' },\n description: { type: 'text' },\n price: { type: 'float' },\n created_at: { type: 'date' }\n }\n }\n }\n });\n console.log('Index erstellt:', response);\n}\n\nIndex löschen
\n\nasync function deleteIndex() {\n await client.indices.delete({ index: 'products' });\n console.log('Index gelöscht');\n}\n\nDokumente hinzufügen und aktualisieren
\n\nEin Dokument ist die grundlegende Dateneinheit in Elasticsearch. Fügen wir einige Einträge zum Index products hinzu:
async function addDocuments() {\n const doc1 = {\n title: 'Apple MacBook Pro Laptop',\n description: 'Leistungsstarker Laptop für Entwickler und Designer',\n price: 2499.99,\n created_at: new Date()\n };\n\n const doc2 = {\n title: 'Logitech mechanische Tastatur',\n description: 'Kabellose Tastatur mit Hintergrundbeleuchtung',\n price: 149.99,\n created_at: new Date()\n };\n\n // Hinzufügen mit ID\n await client.index({\n index: 'products',\n id: '1',\n body: doc1\n });\n\n // Hinzufügen ohne ID (automatische Generierung)\n await client.index({\n index: 'products',\n body: doc2\n });\n\n // Erzwungenes Schreiben auf die Festplatte\n await client.indices.refresh({ index: 'products' });\n}\n\nFür teilweise Aktualisierungen wird die Methode update verwendet:
await client.update({\n index: 'products',\n id: '1',\n body: {\n doc: {\n price: 2399.99\n }\n }\n});\n\nDatensuche
\n\nElasticsearch bietet eine leistungsstarke DSL zum Erstellen von Abfragen. Betrachten wir einige Beispiele.
\n\nVolltextsuche
\n\nasync function searchProducts(query) {\n const response = await client.search({\n index: 'products',\n body: {\n query: {\n match: {\n description: query\n }\n }\n }\n });\n\n console.log('Gefundene Dokumente:', response.hits.total.value);\n response.hits.hits.forEach