Elasticsearch は、さまざまな検索およびデータ分析シナリオで広く使用されているオープンソースの分散検索エンジンです。同時に、Go 言語は効率的で便利なプログラミング言語として、ますます多くの開発者に愛され、使用されています。 Elasticsearch の高性能クエリおよびデータ分析機能のために、Go はいくつかの便利なクエリ ライブラリとフレームワークも提供します。この記事では、Elasticsearch クエリをより適切に実装できるように、Go 言語での Elasticsearch のクエリに関連する知識を詳しく紹介します。
1. Go 言語ライブラリの紹介
Go 言語にはすでに成熟した Elasticsearch クエリ ライブラリがいくつかありますが、以下ではそれぞれの特徴に応じて簡単に紹介します。
go-elasticsearch は、Elasticsearch が正式にリリースした Go 言語で実装された Elasticsearch クライアントであり、Elasticsearch のクエリ機能と分析機能も含まれています。特に Elasticsearch 7.x バージョン以降、go-elasticsearch は Elasticsearch によって公式に推奨される Go 言語ライブラリになりました。 go-elasticsearch は複数のオペレーティング システム プラットフォームで実行でき、すでに Elasticsearch 6.x および 7.x バージョンをサポートしています。具体的な使い方については公式ドキュメントを参照してください。
go-es は、Xiaomi がオープンソース化した Elasticsearch Go クライアントです。その使いやすさと包括的な機能により、大規模な国内規模 インターネット企業で広く使用されている Elasticsearch クライアント ライブラリの 1 つ。 go-es ライブラリのさまざまなクエリ API のパラメーター設計はシンプルかつ明確で、構文は Elasticsearch のクエリ構文に非常に近いため、クエリに Elasticsearch クエリ DSL を直接使用できます。このライブラリの詳しい使用方法については、Github リポジトリを参照してください。
goes は、シンプルで使いやすい Elasticsearch Go クライアント ライブラリです。基本的な Elasticsearch 操作の学習コストを大幅に削減し、インターフェイスとオブジェクトの両方の使用をサポートします。クエリおよび分析機能に加えて、Gos は 2 つの経度と緯度の間の距離と角度の値の計算をサポートする単純な地理座標計算ライブラリも提供します。 kingim/goes の詳しい使用方法については、Github リポジトリを参照してください。
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 をクエリする方法を紹介する例をいくつか示します。
公式ドキュメントでは、次の方法を推奨しています:
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) }
特定の単語を含むドキュメントをクエリする
q := elastic.NewTermQuery("content", "hello") searchResult, err := client.Search(). Index("twitter"). Query(q). Do(ctx) if err != nil { log.Fatalln(err) }
特定の範囲内のドキュメントをクエリする
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) }
集計関数を使用して分類統計を実装する
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 サイトの他の関連記事を参照してください。