Elasticsearch क्लाइंट Go (Golang) के लिए: सर्च के साथ काम करने का शक्तिशाली टूल
Elasticsearch Apache Lucene पर आधारित एक वितरित सर्च और एनालिटिक्स सिस्टम है, जो रियल-टाइम में फुल-टेक्स्ट सर्च, एग्रीगेशन और एनालिटिक्स करने की सुविधा देता है। Go (Golang) भाषा से Elasticsearch के साथ इंटरैक्ट करने के लिए आधिकारिक क्लाइंट go-elasticsearch उपलब्ध है। यह Elastic टीम द्वारा डेवलप और मेंटेन की गई लाइब्रेरी है, जो Elasticsearch के REST API के साथ काम करने के लिए पूर्ण टूलसेट प्रदान करती है।
go-elasticsearch की क्षमताएं और लाभ
go-elasticsearch लाइब्रेरी Go डेवलपर्स को निम्नलिखित सुविधाएं प्रदान करती है:
- Elasticsearch API का पूर्ण समर्थन — इंडेक्सिंग, सर्च, एग्रीगेशन, क्लस्टर मैनेजमेंट और सेटिंग्स सहित सभी API वर्जन।
- टाइपिफाइड हेल्पर फंक्शन — क्वेरी बनाने और रिस्पॉन्स प्रोसेस करने को आसान बनाते हैं।
- Bulk ऑपरेशन का समर्थन — डॉक्यूमेंट्स की बल्क इंसर्शन, अपडेट और डिलीट।
- ऑटोमैटिक कनेक्शन मैनेजमेंट — कनेक्शन पूल, एरर पर रीट्राई और लोड बैलेंसिंग।
- Go मॉड्यूल के साथ संगतता —
go getके माध्यम से आसान इंस्टॉलेशन और अपडेट। - कॉन्टेक्स्ट (context) का समर्थन — रिक्वेस्ट कैंसलेशन और टाइमआउट।
- एक्सटेंसिबिलिटी — अपने खुद के ट्रांसपोर्ट और मिडलवेयर बनाने की सुविधा।
इंस्टॉलेशन और कॉन्फ़िगरेशन
लाइब्रेरी इंस्टॉल करने के लिए निम्न कमांड चलाएं:
go get github.com/elastic/go-elasticsearch/v8
इंस्टॉलेशन के बाद, बेसिक सेटिंग्स के साथ क्लाइंट बनाएं:
package main
import (
"log"
"github.com/elastic/go-elasticsearch/v8"
)
func main() {
cfg := elasticsearch.Config{
Addresses: []string{
"http://localhost:9200",
},
}
es, err := elasticsearch.NewClient(cfg)
if err != nil {
log.Fatalf("क्लाइंट बनाने में त्रुटि: %s", err)
}
log.Println("Elasticsearch क्लाइंट सफलतापूर्वक बनाया गया")
}
ऑथेंटिकेशन वाले क्लस्टर से कनेक्ट करने के लिए यूज़रनेम और पासवर्ड दें:
cfg := elasticsearch.Config{
Addresses: []string{"https://your-cluster-url:9200"},
Username: "elastic",
Password: "your_password",
}
डेटा के साथ मुख्य ऑपरेशन
इंडेक्स बनाना
res, err := es.Indices.Create("my_index")
if err != nil {
log.Fatalf("इंडेक्स बनाने में त्रुटि: %s", err)
}
defer res.Body.Close()
log.Println(res.String())
डॉक्यूमेंट इंडेक्स करना
डॉक्यूमेंट जोड़ने के लिए Index मेथड का उपयोग करें:
package main
import (
"bytes"
"encoding/json"
"log"
"github.com/elastic/go-elasticsearch/v8"
)
type Book struct {
Title string `json:"title"`
Author string `json:"author"`
Year int `json:"year"`
}
func main() {
es, _ := elasticsearch.NewClient(elasticsearch.Config{
Addresses: []string{"http://localhost:9200"},
})
book := Book{
Title: "युद्ध और शांति",
Author: "लियो टॉल्स्टॉय",
Year: 1869,
}
data, _ := json.Marshal(book)
res, err := es.Index("books", bytes.NewReader(data))
if err != nil {
log.Fatalf("इंडेक्सिंग में त्रुटि: %s", err)
}
defer res.Body.Close()
log.Println(res.String())
}
डॉक्यूमेंट सर्च करना
सर्च Search मेथड के माध्यम से JSON फॉर्मेट में क्वेरी बॉडी के साथ की जाती है:
query := `{
"query": {
"match": {
"author": "टॉल्स्टॉय"
}
}
}`
res, err := es.Search(
es.Search.WithIndex("books"),
es.Search.WithBody(bytes.NewReader([]byte(query))),
es.Search.WithPretty(),
)
if err != nil {
log.Fatalf("सर्च में त्रुटि: %s", err)
}
defer res.Body.Close()
log.Println(res.String())
Bulk ऑपरेशन
एक साथ कई डॉक्यूमेंट इंडेक्स करने के लिए Bulk API का उपयोग करें:
var buf bytes.Buffer
for i, book := range books {
meta := []byte(`{"index":{"_index":"books","_id":"` + strconv.Itoa(i+1) + `"}}` + "\n")
data, _ := json.Marshal(book)
buf.Write(meta)
buf.Write(data)
buf.WriteByte('\n')
}
res, err := es.Bulk(bytes.NewReader(buf.Bytes()))
if err != nil {
log.Fatalf("Bulk ऑपरेशन में त्रुटि: %s", err)
}
defer res.Body.Close()
log.Println(res.String())
निष्कर्ष
go-elasticsearch लाइब्रेरी Go डेवलपर्स के लिए Elasticsearch के साथ काम करने का सबसे अच्छा तरीका है। यह पूर्ण API समर्थन, उच्च प्रदर्शन और आसान उपयोग प्रदान करती है। चाहे आप एक छोटा प्रोजेक्ट बना रहे हों या बड़े पैमाने पर सर्च सिस्टम, go-elasticsearch आपकी सभी जरूरतों को पूरा करेगा।