عميل Elasticsearch لجافا: دليل شامل للعمل مع Java Client

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

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

ابدأ الدورة

عميل Elasticsearch لجافا: دليل شامل

\n\n

Elasticsearch هو نظام بحث وتحليلات موزع وقوي مبني على Apache Lucene. للتكامل معه من تطبيقات Java، توفر شركة Elastic عميل Elasticsearch Java Client الرسمي (المعروف سابقًا باسم High-Level REST Client). في هذه المقالة، سنشرح بالتفصيل كيفية استخدام هذا العميل لتنفيذ العمليات الأساسية: الاتصال، فهرسة المستندات، عمليات CRUD، والبحث النصي الكامل.

\n\n

ما هو Elasticsearch Java Client؟

\n\n

Elasticsearch Java Client هو واجهة برمجة تطبيقات (API) حديثة وآمنة من حيث الأنواع للتفاعل مع Elasticsearch من Java. وهو مبني على عميل HTTP غير متزامن ويدعم جميع إصدارات Elasticsearch بدءًا من 7.x. المزايا الرئيسية:

\n\n
    \n
  • دعم كامل لجميع واجهات برمجة تطبيقات Elasticsearch (الفهرسة، البحث، التجميعات، إدارة الكتلة).
  • \n
  • عدم التزامن والتفاعلية — دعم مدمج لـ CompletableFuture والتدفقات التفاعلية.
  • \n
  • استعلامات DSL آمنة من حيث الأنواع — تقليل الأخطاء في مرحلة الترجمة.
  • \n
  • تكوين بسيط — الحد الأدنى من التبعيات.
  • \n
\n\n

التثبيت والإعداد

\n\n

لربط العميل بمشروع Maven، أضف التبعية التالية إلى pom.xml:

\n\n
<dependency>\n    <groupId>co.elastic.clients</groupId>\n    <artifactId>elasticsearch-java</artifactId>\n    <version>8.15.0</version>\n</dependency>
\n\n

لـ Gradle (build.gradle):

\n\n
implementation 'co.elastic.clients:elasticsearch-java:8.15.0'
\n\n

ستحتاج أيضًا إلى Jackson لتسلسل/إلغاء تسلسل JSON:

\n\n
<dependency>\n    <groupId>com.fasterxml.jackson.core</groupId>\n    <artifactId>jackson-databind</artifactId>\n    <version>2.17.0</version>\n</dependency>
\n\n

إنشاء العميل والاتصال

\n\n

لإنشاء العميل، يجب تحديد مضيف ومنفذ Elasticsearch. مثال على التكوين الأساسي:

\n\n
import co.elastic.clients.elasticsearch.ElasticsearchClient;\nimport co.elastic.clients.json.jackson.JacksonJsonpMapper;\nimport co.elastic.clients.transport.rest_client.RestClientTransport;\nimport org.apache.http.Header;\nimport org.apache.http.message.BasicHeader;\nimport org.elasticsearch.client.RestClient;\n\npublic class ElasticsearchExample {\n\n    public static ElasticsearchClient createClient() {\n        // إنشاء عميل REST منخفض المستوى\n        RestClient restClient = RestClient.builder(\n                new HttpHost("localhost", 9200, "http")\n        ).setDefaultHeaders(new Header[]{\n                new BasicHeader("Content-Type", "application/json")\n        }).build();\n\n        // النقل مع مابير Jackson\n        RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());\n\n        // عميل عالي المستوى\n        return new ElasticsearchClient(transport);\n    }\n\n    public static void main(String[] args) throws IOException {\n        ElasticsearchClient client = createClient();\n        System.out.println("تم إنشاء العميل بنجاح!");\n        client.close();\n    }\n}
\n\n

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

\n\n

قبل البدء، يجب إنشاء فهرس. لنلقِ نظرة على مثال لإنشاء فهرس مع تعيين (mapping):

\n\n
public static void createIndex(ElasticsearchClient client, String indexName) throws IOException {\n    client.indices().create(c -> c\n            .index(indexName)\n            .mappings(m -> m\n                    .properties("title", p -> p.text(t -> t))\n                    .properties("content", p -> p.text(t -> t))\n                    .properties("price", p -> p.double_(d -> d))\n                    .properties("createdAt", p -> p.date(d -> d))\n                    

توصيات