Elasticsearch-Client für Node.js: @elastic/elasticsearch

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Elasticsearch-Client für JavaScript (Node.js) — @elastic/elasticsearch

\n\n

Elasticsearch 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.

\n\n

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\n

Installation und Verbindung

\n\n

Die Installation des Clients erfolgt über den Paketmanager npm:

\n\n
npm install @elastic/elasticsearch
\n\n

Nach der Installation muss eine Client-Instanz erstellt werden, wobei die Adresse des Elasticsearch-Servers und gegebenenfalls Authentifizierungsparameter angegeben werden:

\n\n
const { 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\n

Für die Arbeit mit dem Cloud-Dienst Elastic Cloud werden die Parameter cloud.id und auth.apiKey verwendet.

\n\n

Arbeit mit Indizes

\n\n

Ein Index in Elasticsearch ist das Äquivalent einer Datenbank in relationalen DBMS. Betrachten wir die grundlegenden Operationen.

\n\n

Index erstellen

\n\n
async 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\n

Index löschen

\n\n
async function deleteIndex() {\n  await client.indices.delete({ index: 'products' });\n  console.log('Index gelöscht');\n}
\n\n

Dokumente hinzufügen und aktualisieren

\n\n

Ein Dokument ist die grundlegende Dateneinheit in Elasticsearch. Fügen wir einige Einträge zum Index products hinzu:

\n\n
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\n

Für teilweise Aktualisierungen wird die Methode update verwendet:

\n\n
await client.update({\n  index: 'products',\n  id: '1',\n  body: {\n    doc: {\n      price: 2399.99\n    }\n  }\n});
\n\n

Datensuche

\n\n

Elasticsearch bietet eine leistungsstarke DSL zum Erstellen von Abfragen. Betrachten wir einige Beispiele.

\n\n

Volltextsuche

\n\n
async 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                    

Empfehlungen