عميل Elasticsearch REST لـ Kotlin: دليل الاستخدام

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل Elasticsearch لـ Kotlin: أداة قوية للبحث والتحليلات



Elasticsearch هو نظام بحث وتحليلات موزع يعتمد على Apache Lucene، ويتيح إجراء بحث نصي كامل، وتجميعات، وتحليل كميات كبيرة من البيانات بسرعة. للعمل مع Elasticsearch من تطبيقات Kotlin، توجد عدة عملاء، لكن الأحدث والأكثر توصية هو Elasticsearch Java Client (بدءًا من الإصدار 7.16) مع دعم كامل لـ Kotlin. في هذه المقالة، سنستعرض تثبيته، إعداده، والعمليات الأساسية.



التثبيت والربط



للبدء، أضف التبعية إلى ملف build.gradle.kts الخاص بك:



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")}


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


إنشاء العميل



تستخدم المكتبة نمط Builder للتكوين. فيما يلي مثال لإنشاء عميل متصل بنسخة محلية من Elasticsearch:



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 (بدون مصادقة) val restClient = RestClient.builder( HttpHost("localhost", 9200, "http") ).build()

// إنشاء النقل مع مخطّط JSON من Jackson val transport: ElasticsearchTransport = RestClientTransport( restClient, JacksonJsonpMapper() )

// إرجاع العميل الجاهز return ElasticsearchClient(transport)}


للبيئات الإنتاجية، يُوصى باستخدام المصادقة و HTTPS:



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


العمل مع الفهارس



قبل تنفيذ العمليات على المستندات، يجب إنشاء فهرس (إذا لم يكن موجودًا). مثال على إنشاء فهرس مع تعيين الحقول:



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("تم إنشاء الفهرس: ${response.acknowledged}")}


عمليات CRUD على المستندات



إنشاء/تحديث مستند (Index API)



data class Article(    val title: String,    val content: String,    val timestamp: String = java.time.Instant.now().toString())

suspend fun indexDocument(client: E

توصيات