Kotlin के लिए Elasticsearch क्लाइंट: खोज और विश्लेषण के लिए शक्तिशाली उपकरण
\n\nElasticsearch Apache Lucene पर आधारित एक वितरित खोज और विश्लेषण प्रणाली है, जो बड़ी मात्रा में डेटा पर फुल-टेक्स्ट खोज, एग्रीगेशन और विश्लेषण को तेज़ी से करने की अनुमति देती है। Kotlin अनुप्रयोगों से Elasticsearch के साथ काम करने के लिए कई क्लाइंट मौजूद हैं, लेकिन सबसे आधुनिक और अनुशंसित Elasticsearch Java Client (संस्करण 7.16 से) है जिसमें Kotlin के लिए पूर्ण समर्थन है। इस लेख में, हम इसकी स्थापना, कॉन्फ़िगरेशन और बुनियादी संचालन पर विचार करेंगे।
\n\nस्थापना और कनेक्शन
\n\nआरंभ करने के लिए, अपने build.gradle.kts में निर्भरता जोड़ें:
dependencies {\n implementation("co.elastic.clients:elasticsearch-java:8.15.0")\n implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.17.0")\n implementation("jakarta.json:jakarta.json-api:2.1.3")\n}\n\nMaven (pom.xml) के लिए:
<dependency>\n <groupId>co.elastic.clients</groupId>\n <artifactId>elasticsearch-java</artifactId>\n <version>8.15.0</version>\n</dependency>\n<dependency>\n <groupId>com.fasterxml.jackson.module</groupId>\n <artifactId>jackson-module-kotlin</artifactId>\n <version>2.17.0</version>\n</dependency>\n\nक्लाइंट बनाना
\n\nलाइब्रेरी कॉन्फ़िगरेशन के लिए Builder पैटर्न का उपयोग करती है। नीचे स्थानीय Elasticsearch इंस्टेंस से कनेक्ट करने वाला क्लाइंट बनाने का एक उदाहरण दिया गया है:
\n\nimport co.elastic.clients.elasticsearch.ElasticsearchClient\nimport co.elastic.clients.json.jackson.JacksonJsonpMapper\nimport co.elastic.clients.transport.ElasticsearchTransport\nimport co.elastic.clients.transport.rest_client.RestClientTransport\nimport org.apache.http.HttpHost\nimport org.elasticsearch.client.RestClient\n\nfun createElasticsearchClient(): ElasticsearchClient {\n // HTTP क्लाइंट बनाएँ (बिना प्रमाणीकरण के)\n val restClient = RestClient.builder(\n HttpHost("localhost", 9200, "http")\n ).build()\n\n // Jackson JSON-मैपर के साथ ट्रांसपोर्ट बनाएँ\n val transport: ElasticsearchTransport = RestClientTransport(\n restClient, \n JacksonJsonpMapper()\n )\n\n // और तैयार क्लाइंट लौटाएँ\n return ElasticsearchClient(transport)\n}\n\nप्रोडक्शन वातावरण के लिए प्रमाणीकरण और HTTPS का उपयोग करने की अनुशंसा की जाती है:
\n\nval credentialsProvider = BasicCredentialsProvider()\ncredentialsProvider.setCredentials(\n AuthScope.ANY,\n UsernamePasswordCredentials("elastic", "your_password")\n)\n\nval restClient = RestClient.builder(\n HttpHost("your-cluster.com", 9243, "https")\n)\n.setHttpClientConfigCallback { httpClientBuilder ->\n httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)\n}\n.build()\n\nइंडेक्स के साथ कार्य
\n\nदस्तावेज़ों पर संचालन करने से पहले एक इंडेक्स बनाना होगा (यदि वह मौजूद नहीं है)। मैपिंग के साथ इंडेक्स बनाने का उदाहरण:
\n\nsuspend fun createIndex(client: ElasticsearchClient, indexName: String) {\n val response = client.indices().create { createBuilder ->\n createBuilder\n .index(indexName)\n .mappings { mappings ->\n mappings\n .properties("title") { prop -> prop.text { it } }\n .properties("content") { prop -> prop.text { it } }\n .properties("timestamp") { prop -> prop.date { it } }\n }\n }\n println("इंडेक्स बनाया गया: ${response.acknowledged}")\n}\n\nदस्तावेज़ों के साथ CRUD संचालन
\n\nदस्तावेज़ बनाना/अपडेट करना (Index API)
\n\ndata class Article(\n val title: String,\n val content: String,\n val timestamp: String = java.time.Instant.now().toString()\n)\n\nsuspend fun indexDocument(client: E