Elasticsearch ialah enjin carian teragih sumber terbuka yang digunakan secara meluas dalam pelbagai senario carian dan analisis data. Pada masa yang sama, sebagai bahasa pengaturcaraan yang cekap dan mudah, bahasa Go juga disukai dan digunakan oleh semakin ramai pembangun. Untuk fungsi pertanyaan dan analisis data berprestasi tinggi Elasticsearch, Go juga menyediakan beberapa perpustakaan dan rangka kerja pertanyaan yang mudah. Artikel ini akan memperkenalkan secara terperinci pengetahuan yang berkaitan dengan pertanyaan Elasticsearch dalam bahasa Go untuk membantu anda melaksanakan pertanyaan Elasticsearch dengan lebih baik.
1. Pengenalan kepada pustaka bahasa Go
Sudah terdapat beberapa pustaka pertanyaan Elasticsearch yang matang dalam bahasa Go Perkara berikut memperkenalkannya secara ringkas mengikut ciri masing-masing.
go-elasticsearch ialah klien Elasticsearch yang dilancarkan secara rasmi oleh Elasticsearch dan dilaksanakan dalam bahasa Go. Ia juga termasuk fungsi pertanyaan dan analisis Elasticsearch. Terutama selepas versi Elasticsearch 7.x, go-elasticsearch telah menjadi perpustakaan bahasa Go yang disyorkan secara rasmi oleh Elasticsearch. go-elasticsearch boleh dijalankan pada berbilang platform sistem pengendalian dan sudah pun menyokong versi Elasticsearch 6.x dan 7.x. Untuk penggunaan khusus, sila rujuk kepada dokumentasi rasmi.
go-es ialah klien Elasticsearch Go sumber terbuka oleh Xiaomi Disebabkan kemudahan penggunaan dan fungsi yang komprehensif, ia telah menjadi besar- skala domestik Salah satu perpustakaan pelanggan Elasticsearch yang digunakan secara meluas dalam perusahaan Internet. Reka bentuk parameter pelbagai API pertanyaan dalam perpustakaan go-es adalah mudah dan jelas, dan sintaksnya sangat hampir dengan sintaks pertanyaan Elasticsearch, jadi anda boleh terus menggunakan DSL pertanyaan Elasticsearch untuk membuat pertanyaan. Untuk penggunaan terperinci perpustakaan ini, sila rujuk repositori Githubnya.
goes ialah perpustakaan pelanggan Elasticsearch Go yang ringkas dan mudah digunakan. Ia sangat mengurangkan kos pembelajaran operasi asas Elasticsearch dan menyokong kedua-dua antara muka dan penggunaan objek. Selain fungsi pertanyaan dan analisis, goes juga menyediakan perpustakaan pengiraan koordinat geografi mudah yang menyokong pengiraan nilai jarak dan sudut antara dua longitud dan latitud. Untuk penggunaan terperinci kingim/goes, sila rujuk repositori Githubnya.
olivere/elastic ialah perpustakaan pelanggan Go untuk Elasticsearch. Sama seperti go-elasticsearch dan go-es, kedua-duanya menyediakan API pertanyaan yang sangat mudah untuk Elasticsearch. Walau bagaimanapun, olivere/elastic memberi lebih perhatian kepada penyirian dan penyahserikatan hasil pertanyaan, menyokong pengkapsulan dan penapisan berbilang format output (seperti Json, Xml, dll.), dan sesuai untuk senario seperti front-end dan back-end. interaksi hasil. Anda boleh menyemak repositori Github olivere/anjal untuk mendapatkan butiran penggunaan lanjut.
2. Query Elasticsearch
Dalam bahasa Go, melalui pustaka klien Elasticsearch Go, anda boleh melakukan operasi pertanyaan, carian dan analisis berkaitan Elasticsearch. Dari perspektif panggilan antara muka, terdapat beberapa perbezaan dalam cara menggunakan setiap perpustakaan, tetapi fungsi pertanyaan asas, sintaks dan logik adalah serupa. Di bawah ini kami memberikan beberapa contoh untuk memperkenalkan cara membuat pertanyaan Elasticsearch dalam Go.
es Dokumentasi rasmi mengesyorkan kaedah berikut:
Package main import ( "context" "fmt" "github.com/elastic/go-elasticsearch/v7" "github.com/elastic/go-elasticsearch/v7/esapi" "github.com/elastic/go-elasticsearch/v7/esutil" ) func main() { es, _ := elasticsearch.NewDefaultClient() req := esapi.SearchRequest{ Body: esutil.NewJSONReader(map[string]interface{}{"query": map[string]interface{}{"match_all": map[string]interface{}{}}}), Index: []string{"my-index-000001"}, TrackTotalHits: true, } res, err := req.Do(context.Background(), es) fmt.Println(res, err) }
Soal dokumen yang mengandungi perkataan tertentu Dokumen
q := elastic.NewTermQuery("content", "hello") searchResult, err := client.Search(). Index("twitter"). Query(q). Do(ctx) if err != nil { log.Fatalln(err) }
Soal dokumen dalam julat tertentu
terms := []string{"world", "how", "are", "you"} q1 := elastic.NewTermsQuery("content", terms...) q2 := elastic.NewRangeQuery("publish_time").Gte("2021-01-01").Lte("2021-02-01") query := elastic.NewBoolQuery().Must(q1).Filter(q2) searchResult, err := client.Search(). Index("twitter"). Query(query). From(0).Size(10). Do(ctx) if err != nil { log.Fatalln(err) }
Gunakan fungsi agregat untuk melaksanakan statistik klasifikasi
agg := elastic.NewTermsAggregation().Field("category").Size(10000) query := elastic.NewMatchAllQuery() searchResult, err := client.Search().Index("goods").Size(0).Query(query).Aggregation("by_category", agg).Do(ctx) if err != nil { log.Fatalln(err) } bucketDateHists := searchResult.Aggregations.Terms("by_category") for _, bucket := range bucketDateHists.Buckets { fmt.Printf("%v: %d\n", bucket.Key, int(bucket.DocCount)) }
3. Ringkasan
Melalui pengenalan di atas, kita dapat melihat bahawa perpustakaan pertanyaan Elasticsearch yang disediakan oleh bahasa Go adalah sangat kaya, dan operasinya juga sangat mudah dan cekap. Sama ada carian data atau analisis data, bahasa Go boleh memainkan peranan penting. Sudah tentu, jika anda ingin mempunyai pemahaman yang lebih mendalam tentang pengetahuan berkaitan bahasa Elasticsearch atau Go, adalah disyorkan untuk membaca lebih banyak dokumen rasmi dan kod sumber untuk mendalami pemahaman dan pengetahuan anda.
Atas ialah kandungan terperinci Mari bercakap tentang pengetahuan tentang pertanyaan Elasticsearch dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!