ビッグデータ時代の到来に伴い、データのストレージとクエリの需要も増加しています。 Elasticsearch は現在、比較的シンプルで使いやすい RESTful API を提供する人気の分散検索エンジンです。 Golang は効率的なプログラミング言語として、ますます多くの開発者に愛されています。この記事では、Golang を使用して Elasticsearch クエリ操作を実行する方法を紹介します。
1. 依存ライブラリのインストール
Golang では、Elasticsearch 関連の操作を実行するためにサードパーティのライブラリを使用する必要があります。公式に提供されている github.com/elastic/go-elasticsearch
ライブラリを使用することをお勧めします。
このライブラリをインストールするには、ターミナルで次のコマンドを実行するだけです:
go get github.com/elastic/go-elasticsearch
コンピュータが github.com
にアクセスできない場合は、次の手順を参照してください。
https://github.com/elastic/go-elasticsearch にアクセスし、
zip ファイルをローカルにダウンロードします。
zip ファイルをディレクトリに解凍します。
GOPATH ディレクトリに移動します。
cd $GOPATH/go-elasticsearch go install
github.com/elastic/go-elasticsearch ライブラリを導入し、次に
NewDefaultClient メソッドを使用して接続を確立する必要があります。
import ( "fmt" "github.com/elastic/go-elasticsearch" "log" ) func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, } es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("连接 Elasticsearch 失败:%s", err) } fmt.Println("连接 Elasticsearch 成功") }
http://localhost:9200 として指定します。Elasticsearch が別のアドレスで実行されている場合は、アドレスを変更してください。
http ライブラリを通じて HTTP リクエストを送信し、応答コンテンツを受信することで、Elasticsearch クエリ操作を完了できます。
test_index の下の
message フィールドに
hello 文字列が含まれるすべてのデータを例として取り上げます:
import ( "bytes" "encoding/json" "fmt" "github.com/elastic/go-elasticsearch" "github.com/elastic/go-elasticsearch/esapi" "io/ioutil" "log" "net/http" "strings" ) func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, } es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("连接 Elasticsearch 失败:%s", err) } fmt.Println("连接 Elasticsearch 成功") var ( r map[string]interface{} b bytes.Buffer ) query := map[string]interface{}{ "query": map[string]interface{}{ "match": map[string]interface{}{ "message": "hello", }, }, } if err := json.NewEncoder(&b).Encode(query); err != nil { log.Fatalf("无法编码查询:%s", err) } req, _ := http.NewRequest("GET", "/test_index/_search", &b) req.Header.Add("Content-Type", "application/json") res, err := es.Perform(req) if err != nil { log.Fatalf("查询 Elasticsearch 失败:%s", err) } defer res.Body.Close() if res.IsError() { var r map[string]interface{} if err := json.NewDecoder(res.Body).Decode(&r); err != nil { log.Fatalf("响应错误:%s", err) } else { // 响应错误信息 log.Fatalf("响应错误:%s", r["error"].(map[string]interface{})["reason"]) } } if err := json.NewDecoder(res.Body).Decode(&r); err != nil { log.Fatalf("响应结果解析失败:%s", err) } results := r["hits"].(map[string]interface{})["hits"].([]interface{}) fmt.Printf("共找到 %d 条匹配结果:\n", len(results)) for _, result := range results { message := result.(map[string]interface{})["_source"].(map[string]interface{})["message"].(string) fmt.Printf("%s\n", message) } }
message フィールドに
hello 文字列が含まれます。次に、Golang の
http ライブラリを使用して HTTP リクエストを作成し、リクエスト本文にクエリ条件を含めます。次に、
es.Perform メソッドを使用してリクエストを送信し、応答結果を受け取ります。
GET メソッドを使用してクエリ リクエストを送信していることに注意してください。実際、Elasticsearch は、
GET、
POST、
PUT など、さまざまなクエリ リクエスト メソッドをサポートしています。特定のクエリ方法と構文については、Elasticsearch の公式ドキュメントを参照してください。
github.com/olivere/elastic を使用して、より柔軟で効率的なクエリ方法も提供します。より効率的なクエリ要件がある場合は、このライブラリの使用を検討してください。
以上がElasticsearch クエリ操作に Golang を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。