ホームページ  >  記事  >  バックエンド開発  >  Go 言語での Elasticsearch のクエリに関する知識について話しましょう

Go 言語での Elasticsearch のクエリに関する知識について話しましょう

PHPz
PHPzオリジナル
2023-04-10 14:18:45971ブラウズ

Elasticsearch は、さまざまな検索およびデータ分析シナリオで広く使用されているオープンソースの分散検索エンジンです。同時に、Go 言語は効率的で便利なプログラミング言語として、ますます多くの開発者に愛され、使用されています。 Elasticsearch の高性能クエリおよびデータ分析機能のために、Go はいくつかの便利なクエリ ライブラリとフレームワークも提供します。この記事では、Elasticsearch クエリをより適切に実装できるように、Go 言語での Elasticsearch のクエリに関連する知識を詳しく紹介します。

1. Go 言語ライブラリの紹介

Go 言語にはすでに成熟した Elasticsearch クエリ ライブラリがいくつかありますが、以下ではそれぞれの特徴に応じて簡単に紹介します。

  1. go-elasticsearch

go-elasticsearch は、Elasticsearch が正式にリリースした Go 言語で実装された Elasticsearch クライアントであり、Elasticsearch のクエリ機能と分析機能も含まれています。特に Elasticsearch 7.x バージョン以降、go-elasticsearch は Elasticsearch によって公式に推奨される Go 言語ライブラリになりました。 go-elasticsearch は複数のオペレーティング システム プラットフォームで実行でき、すでに Elasticsearch 6.x および 7.x バージョンをサポートしています。具体的な使い方については公式ドキュメントを参照してください。

  1. go-es

go-es は、Xiaomi がオープンソース化した Elasticsearch Go クライアントです。その使いやすさと包括的な機能により、大規模な国内規模 インターネット企業で広く使用されている Elasticsearch クライアント ライブラリの 1 つ。 go-es ライブラリのさまざまなクエリ API のパラメーター設計はシンプルかつ明確で、構文は Elasticsearch のクエリ構文に非常に近いため、クエリに Elasticsearch クエリ DSL を直接使用できます。このライブラリの詳しい使用方法については、Github リポジトリを参照してください。

  1. kingim/goes

goes は、シンプルで使いやすい Elasticsearch Go クライアント ライブラリです。基本的な Elasticsearch 操作の学習コストを大幅に削減し、インターフェイスとオブジェクトの両方の使用をサポートします。クエリおよび分析機能に加えて、Gos は 2 つの経度と緯度の間の距離と角度の値の計算をサポートする単純な地理座標計算ライブラリも提供します。 kingim/goes の詳しい使用方法については、Github リポジトリを参照してください。

  1. olivere/elastic

olivere/elastic は、Elasticsearch の Go クライアント ライブラリです。 go-elasticsearch および go-es と同様に、どちらも Elasticsearch に非常に便利なクエリ API を提供します。ただし、olivere/elastic はクエリ結果のシリアル化と逆シリアル化により注意を払い、複数の出力形式 (Json、Xml など) のカプセル化とフィルタリングをサポートし、フロントエンドとバックエンドなどのシナリオに適しています。結果の相互作用。使用法の詳細については、olivere/elastic Github リポジトリをチェックしてください。

2. クエリ Elasticsearch

Go 言語では、Elasticsearch Go クライアント ライブラリを通じて、Elasticsearch 関連のクエリ、検索、分析操作を簡単に実行できます。インターフェイス呼び出しの観点から見ると、各ライブラリの使用方法にはいくつかの違いがありますが、基本的なクエリ関数、構文、ロジックは似ています。以下に、Go で Elasticsearch をクエリする方法を紹介する例をいくつか示します。

  1. すべてのドキュメントをクエリする

公式ドキュメントでは、次の方法を推奨しています:

    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. 特定の単語を含むドキュメントをクエリする

     q := elastic.NewTermQuery("content", "hello")
     searchResult, err := client.Search().
         Index("twitter").
         Query(q).
         Do(ctx)
     if err != nil {
         log.Fatalln(err)
     }
  2. 特定の範囲内のドキュメントをクエリする

     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. 集計関数を使用して分類統計を実装する

     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. まとめ

上記の紹介を通じて、Go 言語によって提供される Elasticsearch クエリ ライブラリが非常に豊富であり、操作も非常にシンプルかつ効率的であることがわかります。データ検索でもデータ分析でも、Go 言語は重要な役割を果たします。もちろん、ElasticsearchやGo言語関連の知識をより深く理解したい場合は、より公式ドキュメントやソースコードを読んで理解と知識を深めていくことをお勧めします。

以上がGo 言語での Elasticsearch のクエリに関する知識について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。