عميل Elasticsearch لجافا: دليل شامل
\n\nElasticsearch هو نظام بحث وتحليلات موزع وقوي مبني على Apache Lucene. للتكامل معه من تطبيقات Java، توفر شركة Elastic عميل Elasticsearch Java Client الرسمي (المعروف سابقًا باسم High-Level REST Client). في هذه المقالة، سنشرح بالتفصيل كيفية استخدام هذا العميل لتنفيذ العمليات الأساسية: الاتصال، فهرسة المستندات، عمليات CRUD، والبحث النصي الكامل.
\n\nما هو Elasticsearch Java Client؟
\n\nElasticsearch Java Client هو واجهة برمجة تطبيقات (API) حديثة وآمنة من حيث الأنواع للتفاعل مع Elasticsearch من Java. وهو مبني على عميل HTTP غير متزامن ويدعم جميع إصدارات Elasticsearch بدءًا من 7.x. المزايا الرئيسية:
\n\n- \n
- دعم كامل لجميع واجهات برمجة تطبيقات Elasticsearch (الفهرسة، البحث، التجميعات، إدارة الكتلة). \n
- عدم التزامن والتفاعلية — دعم مدمج لـ CompletableFuture والتدفقات التفاعلية. \n
- استعلامات DSL آمنة من حيث الأنواع — تقليل الأخطاء في مرحلة الترجمة. \n
- تكوين بسيط — الحد الأدنى من التبعيات. \n
التثبيت والإعداد
\n\nلربط العميل بمشروع Maven، أضف التبعية التالية إلى pom.xml:
<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\nimplementation '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\nimport 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\npublic 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