Elasticsearch-Client für TypeScript: @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 TypeScript: @elastic/elasticsearch



Die Bibliothek @elastic/elasticsearch ist der offizielle und umfassendste Client für die Interaktion mit der Suchmaschine Elasticsearch aus TypeScript- und JavaScript-Anwendungen. Sie bietet eine praktische API für alle grundlegenden Operationen: Indizierung, Suche, Aktualisierung, Löschen von Daten sowie Cluster-Verwaltung und die Durchführung komplexer Aggregationen. Dank der vollständigen TypeScript-Unterstützung profitieren Entwickler von strenger Typisierung, Autovervollständigung in der IDE und weniger Fehlern während der Kompilierung.



Installation

Führen Sie zur Installation des Clients den folgenden Befehl im Terminal aus:

npm install @elastic/elasticsearch

Zusätzlich wird empfohlen, die Typen für Node.js zu installieren, falls Sie in einer Node-Umgebung arbeiten:

npm install -D @types/node


Grundlegende Verbindungskonfiguration

Erstellen Sie eine Client-Instanz, indem Sie die URL Ihres Elasticsearch-Servers angeben. Standardmäßig wird Port 9200 verwendet.

import { Client } from '@elastic/elasticsearch';

const client = new Client({ node: 'http://localhost:9200', // Für Cloud-Cluster verwenden Sie cloud: { id: '...' } // auth: { apiKey: '...' } oder { username: '...', password: '...' }});


Typisierung von Antworten

Einer der Hauptvorteile von TypeScript ist die Möglichkeit, Dokumente zu typisieren. Der Client unterstützt Generics, was eine strikte Definition der Datenstruktur ermöglicht:

interface Book {  title: string;  author: string;  year: number;  isbn: string;  rating?: number; // optionales Feld}

// Jetzt sind alle Operationen mit dem Index 'books' typisiertasync function addBook(book: Book) { const result = await client.index<Book>({ index: 'books', document: book, }); return result;}


CRUD-Operationen

Dokument erstellen/indizieren

const book: Book = {  title: 'Krieg und Frieden',  author: 'Leo Tolstoi',  year: 1869,  isbn: '978-5-17-123456-7',};

const response = await client.index({ index: 'books', id: '1', // optional, kann weggelassen werden – Elasticsearch generiert eine ID document: book,});console.log('Dokument indiziert:', response._id);


Dokument nach ID abrufen

const getResponse = await client.get({  index: 'books',  id: '1',});console.log('Gefundenes Dokument:', getResponse._source); // als Book typisiert


Dokument aktualisieren

await client.update({  index: 'books',  id: '1',  doc: {    rating: 4.8, // teilweise Aktualisierung  },});


Dokument löschen

await client.delete({  index: 'books',  id: '1',});


Datensuche

Die Hauptmethode für die Volltextsuche ist search. Sie akzeptiert das Elasticsearch Query DSL (Domain Specific Language).

interface SearchResult {  hits: {    total: { value: number };    hits: Array<{ _source: Book }>;  };}

async function searchBooks(query: string) { const result = await client.search<SearchResult>({ index: 'books', query: { multi_match: { query: query, fields: ['title', 'author'], // Suche über mehrere Felder }, }, });

const books = result.hits.hits.map(hit => hit._source); return books;}

// Verwendungconst books = await searchBooks('Tolstoi');console.log(books); // Array von Book-Objekten


Aggregationen

Aggregationen ermöglichen es, statistische Daten über einen Index zu erhalten, z. B. die Anzahl der Bücher pro Jahr.

async function getBooksByYear() {  const result = await client.search({    index: 'books',    size: 0, // keine Dokumente zurückgeben, nur Aggregationen    aggs: {      books_per_year: {        terms: { field: 'year' },      },    },                    

Empfehlungen