Elasticsearch REST-Client für Kotlin: Leitfaden zur Verwendung

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

Empfehlungen