Go (Golang) के लिए Elasticsearch क्लाइंट: सर्च इंजन के साथ काम करने के लिए एक शक्तिशाली टूल
Elasticsearch एक वितरित, फुल-टेक्स्ट सर्च सिस्टम है, जो Apache Lucene पर बनाया गया है। Go (Golang) में एप्लिकेशन से इसके साथ प्रभावी ढंग से इंटरैक्ट करने के लिए आधिकारिक क्लाइंट go-elasticsearch का उपयोग किया जाता है। यह लाइब्रेरी दस्तावेज़ों को इंडेक्स करने से लेकर जटिल विश्लेषणात्मक क्वेरी तक, सभी बुनियादी ऑपरेशन करने के लिए एक सुविधाजनक और उच्च-प्रदर्शन API प्रदान करती है।
इस लेख में, हम लाइब्रेरी की क्षमताओं, इसकी स्थापना, कॉन्फ़िगरेशन पर विस्तार से चर्चा करेंगे और Go में व्यावहारिक कोड उदाहरण प्रदान करेंगे।
go-elasticsearch की मुख्य विशेषताएं
- Elasticsearch REST API का पूर्ण समर्थन — इंडेक्स, दस्तावेज़, सर्च, एग्रीगेशन और क्लस्टर प्रबंधन के साथ काम करना।
- टाइप-सेफ क्वेरी — JSON क्वेरी बनाने के लिए Go स्ट्रक्चर का उपयोग।
- स्वचालित कनेक्शन प्रबंधन — कनेक्शन पूल, त्रुटियों पर पुनः प्रयास, लोड बैलेंसिंग।
- बल्क ऑपरेशन के लिए समर्थन — दस्तावेज़ों की सामूहिक इंडेक्सिंग और अपडेट।
- Go कॉन्टेक्स्ट के साथ एकीकरण — क्वेरी रद्द करना और टाइमआउट।
- आसान कॉन्फ़िगरेशन — कस्टम HTTP क्लाइंट, लॉगिंग, कम्प्रेशन।
इंस्टॉलेशन
लाइब्रेरी स्थापित करने के लिए टर्मिनल में निम्न कमांड चलाएँ:
go get github.com/elastic/go-elasticsearch/v8सुनिश्चित करें कि आपका Go संस्करण 1.18 या उससे अधिक है। यदि आप Elasticsearch के पुराने संस्करण (जैसे, 7.x) का उपयोग कर रहे हैं, तो क्लाइंट का संबंधित संस्करण स्थापित करें:
go get github.com/elastic/go-elasticsearch/v7बेसिक कनेक्शन और कॉन्फ़िगरेशन
काम शुरू करने के लिए, Elasticsearch सर्वर का पता निर्दिष्ट करते हुए एक क्लाइंट बनाएँ:
package main
import ( "log" "github.com/elastic/go-elasticsearch/v8")
func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, // यदि प्रमाणीकरण आवश्यक हो: // Username: "elastic", // Password: "changeme", }
es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("क्लाइंट बनाने में त्रुटि: %s", err) }
// कनेक्शन की जाँच res, err := es.Info() if err != nil { log.Fatalf("जानकारी प्राप्त करने में त्रुटि: %s", err) } defer res.Body.Close()
log.Println(res.String())}दस्तावेज़ों को इंडेक्स करना
इंडेक्स में दस्तावेज़ जोड़ने के लिए Index() या Create() विधि का उपयोग किया जाता है। टाइप किए गए डेटा के साथ एक उदाहरण देखें:
type Article struct { ID int `json:"id"` Title string `json:"title"` Content string `json:"content"` Tags []string `json:"tags"` Date string `json:"date"`}
func indexArticle(es *elasticsearch.Client, article Article) error { body, err := json.Marshal(article) if err != nil { return err }
req := esapi.IndexRequest{ Index: "articles", DocumentID: strconv.Itoa(article.ID), Body: strings.NewReader(string(body)), Refresh: "true", // तत्काल अपडेट के लिए }
res, err := req.Do(context.Background(), es) if err != nil { return err } defer res.Body.Close()
if res.IsError() { return fmt.Errorf("इंडेक्सिंग त्रुटि: %s", res.String()) }
return nil}दस्तावेज़ खोजना
सर्च क्वेरी निष्पादित करने के लिए Search() विधि का उपयोग किया जाता है। फुल-टेक्स्ट सर्च का उदाहरण:
func searchArticles(es *elasticsearch.Client, query string) ([]Article, error) { var buf bytes.Buffer searchQuery := map[string]interface{}{ "quer