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/elasticsearchZusätzlich wird empfohlen, die Typen für Node.js zu installieren, falls Sie in einer Node-Umgebung arbeiten:
npm install -D @types/nodeGrundlegende 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 typisiertDokument 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-ObjektenAggregationen
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' }, }, }, Auch in der Bibliothek
chi Go: vollständige Anleitung mit Beispielen
Arbeiten mit YAML in Kotlin: Bibliotheken, Beispiele und Parsing
Bildverarbeitung in Node.js: Bibliotheken Sharp, Jimp und gm
Autorisierung und Authentifizierung in Java: Spring Security und JWT