Elasticsearch-Client für Kotlin: Leistungsstarkes Tool für Suche und Analyse
Elasticsearch ist ein verteiltes Such- und Analysesystem auf Basis von Apache Lucene, das eine schnelle Volltextsuche, Aggregationen und Analyse großer Datenmengen ermöglicht. Für die Arbeit mit Elasticsearch aus Kotlin-Anwendungen gibt es mehrere Clients, der modernste und empfohlene ist jedoch der Elasticsearch Java Client (ab Version 7.16) mit vollständiger Kotlin-Unterstützung. In diesem Artikel betrachten wir seine Installation, Konfiguration und grundlegende Operationen.
Installation und Einbindung
Fügen Sie zunächst die Abhängigkeit zu Ihrer build.gradle.kts hinzu:
dependencies { implementation("co.elastic.clients:elasticsearch-java:8.15.0") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.17.0") implementation("jakarta.json:jakarta.json-api:2.1.3")}Für Maven (pom.xml):
<dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> <version>8.15.0</version></dependency><dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> <version>2.17.0</version></dependency>Erstellen des Clients
Die Bibliothek verwendet das Builder-Muster für die Konfiguration. Nachfolgend ein Beispiel zur Erstellung eines Clients mit Verbindung zu einer lokalen Elasticsearch-Instanz:
import co.elastic.clients.elasticsearch.ElasticsearchClientimport co.elastic.clients.json.jackson.JacksonJsonpMapperimport co.elastic.clients.transport.ElasticsearchTransportimport co.elastic.clients.transport.rest_client.RestClientTransportimport org.apache.http.HttpHostimport org.elasticsearch.client.RestClient
fun createElasticsearchClient(): ElasticsearchClient { // HTTP-Client erstellen (ohne Authentifizierung) val restClient = RestClient.builder( HttpHost("localhost", 9200, "http") ).build()
// Transport mit Jackson-JSON-Mapper erstellen val transport: ElasticsearchTransport = RestClientTransport( restClient, JacksonJsonpMapper() )
// Fertigen Client zurückgeben return ElasticsearchClient(transport)}Für Produktionsumgebungen wird die Verwendung von Authentifizierung und HTTPS empfohlen:
val credentialsProvider = BasicCredentialsProvider()credentialsProvider.setCredentials( AuthScope.ANY, UsernamePasswordCredentials("elastic", "your_password"))
val restClient = RestClient.builder( HttpHost("your-cluster.com", 9243, "https")).setHttpClientConfigCallback { httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)}.build()Arbeiten mit Indizes
Vor der Durchführung von Dokumentoperationen muss ein Index erstellt werden (falls nicht vorhanden). Beispiel zur Indexerstellung mit Mapping:
suspend fun createIndex(client: ElasticsearchClient, indexName: String) { val response = client.indices().create { createBuilder -> createBuilder .index(indexName) .mappings { mappings -> mappings .properties("title") { prop -> prop.text { it } } .properties("content") { prop -> prop.text { it } } .properties("timestamp") { prop -> prop.date { it } } } } println("Index erstellt: ${response.acknowledged}")}CRUD-Operationen mit Dokumenten
Dokument erstellen/aktualisieren (Index API)
data class Article( val title: String, val content: String, val timestamp: String = java.time.Instant.now().toString())
suspend fun indexDocument(client: E Auch in der Bibliothek
Arbeit mit CSV in C++: Bibliotheken, Parsing und Datenschreiben
ExcelJS für JavaScript (Node.js): Komplette Anleitung mit Beispielen
Arbeiten mit Daten in Swift: Foundation, SwiftDate, DateTools (iOS/macOS)
Prisma für TypeScript: vollständige Anleitung mit Beispielen
Swift-Aufgabenplaner: GCD, OperationQueue und Combine für iOS/macOS