TypeScript के लिए Elasticsearch क्लाइंट: @elastic/elasticsearch
लाइब्रेरी @elastic/elasticsearch TypeScript और JavaScript अनुप्रयोगों से Elasticsearch सर्च इंजन के साथ इंटरैक्ट करने के लिए आधिकारिक और सबसे व्यापक क्लाइंट है। यह सभी बुनियादी संचालन करने के लिए एक सुविधाजनक API प्रदान करता है: इंडेक्सिंग, खोज, अपडेट, डेटा हटाना, साथ ही क्लस्टर प्रबंधन और जटिल एग्रीगेशन निष्पादित करना। TypeScript के पूर्ण समर्थन के कारण, डेवलपर्स को सख्त टाइपिंग, IDE में ऑटो-कम्प्लीशन और कंपाइलेशन चरण में कम त्रुटियाँ मिलती हैं।
स्थापना
क्लाइंट स्थापित करने के लिए टर्मिनल में कमांड चलाएँ:
npm install @elastic/elasticsearchयदि आप Node वातावरण में काम कर रहे हैं, तो Node.js के लिए प्रकार स्थापित करने की अतिरिक्त अनुशंसा की जाती है:
npm install -D @types/nodeकनेक्शन की बुनियादी सेटिंग
अपने Elasticsearch सर्वर का URL निर्दिष्ट करके क्लाइंट का एक इंस्टेंस बनाएँ। डिफ़ॉल्ट रूप से पोर्ट 9200 का उपयोग किया जाता है।
import { Client } from '@elastic/elasticsearch';
const client = new Client({ node: 'http://localhost:9200', // क्लाउड क्लस्टर के लिए cloud: { id: '...' } का उपयोग करें // auth: { apiKey: '...' } या { username: '...', password: '...' }});प्रतिक्रियाओं की टाइपिंग
TypeScript का एक मुख्य लाभ दस्तावेज़ों को टाइप करने की क्षमता है। क्लाइंट जेनेरिक का समर्थन करता है, जो डेटा संरचना को सख्ती से परिभाषित करने की अनुमति देता है:
interface Book { title: string; author: string; year: number; isbn: string; rating?: number; // वैकल्पिक फ़ील्ड}
// अब 'books' इंडेक्स पर सभी संचालन टाइप किए जाएंगेasync function addBook(book: Book) { const result = await client.index<Book>({ index: 'books', document: book, }); return result;}CRUD संचालन
दस्तावेज़ बनाना/इंडेक्स करना
const book: Book = { title: 'युद्ध और शांति', author: 'लियो टॉल्स्टॉय', year: 1869, isbn: '978-5-17-123456-7',};
const response = await client.index({ index: 'books', id: '1', // वैकल्पिक, निर्दिष्ट नहीं किया जा सकता — Elasticsearch ID उत्पन्न करेगा document: book,});console.log('Document indexed:', response._id);ID द्वारा दस्तावेज़ प्राप्त करना
const getResponse = await client.get({ index: 'books', id: '1',});console.log('Found document:', getResponse._source); // Book के रूप में टाइप किया गयादस्तावेज़ अपडेट करना
await client.update({ index: 'books', id: '1', doc: { rating: 4.8, // आंशिक अपडेट },});दस्तावेज़ हटाना
await client.delete({ index: 'books', id: '1',});डेटा खोजना
पूर्ण-पाठ खोज के लिए मुख्य विधि search है। यह Elasticsearch के Query DSL (Domain Specific Language) को स्वीकार करता है।
interface SearchResult { hits: { total: { value: number }; hits: Array<{ _source: Book }>; };}
async function searchBooks(query: string) { const result = await client.search<SearchResult>({ index: 'books', query: { multi_match: { query: query, fields: ['title', 'author'], // कई फ़ील्ड में खोज }, }, });
const books = result.hits.hits.map(hit => hit._source); return books;}
// उपयोगconst books = await searchBooks('टॉल्स्टॉय');console.log(books); // Book ऑब्जेक्ट्स की सरणीएग्रीगेशन
एग्रीगेशन आपको इंडेक्स पर सांख्यिकीय डेटा प्राप्त करने की अनुमति देता है, उदाहरण के लिए, वर्ष के अनुसार पुस्तकों की संख्या।
async function getBooksByYear() { const result = await client.search({ index: 'books', size: 0, // केवल एग्रीगेशन, दस्तावेज़ स्वयं वापस न करें aggs: { books_per_year: { terms: { field: 'year' }, }, },