Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mari bercakap tentang pengetahuan tentang pertanyaan Elasticsearch dalam bahasa Go

Mari bercakap tentang pengetahuan tentang pertanyaan Elasticsearch dalam bahasa Go

PHPz
PHPzasal
2023-04-10 14:18:45934semak imbas

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.

  1. go-elasticsearch

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.

  1. go-es

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.

  1. kingim/goes

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.

  1. olivere/elastic

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.

  1. Soal semua dokumen

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)
    }
  1. 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)
     }
  2. 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)
     }
  3. 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn