Elasticsearch クエリ操作に Golang を使用する方法

PHPz
リリース: 2023-04-11 10:07:44
オリジナル
1240 人が閲覧しました

ビッグデータ時代の到来に伴い、データのストレージとクエリの需要も増加しています。 Elasticsearch は現在、比較的シンプルで使いやすい RESTful API を提供する人気の分散検索エンジンです。 Golang は効率的なプログラミング言語として、ますます多くの開発者に愛されています。この記事では、Golang を使用して Elasticsearch クエリ操作を実行する方法を紹介します。

1. 依存ライブラリのインストール

Golang では、Elasticsearch 関連の操作を実行するためにサードパーティのライブラリを使用する必要があります。公式に提供されている github.com/elastic/go-elasticsearch ライブラリを使用することをお勧めします。

このライブラリをインストールするには、ターミナルで次のコマンドを実行するだけです:

go get github.com/elastic/go-elasticsearch
ログイン後にコピー

コンピュータが github.com にアクセスできない場合は、次の手順を参照してください。

##1.

https://github.com/elastic/go-elasticsearch にアクセスし、zip ファイルをローカルにダウンロードします。

2.

zip ファイルをディレクトリに解凍します。

3. 解凍したディレクトリをプロジェクト ディレクトリの下の

GOPATH ディレクトリに移動します。

4. ターミナルで次のコマンドを実行します:

cd $GOPATH/go-elasticsearch
go install
ログイン後にコピー
このプロセスには時間がかかる場合があります。しばらくお待ちください。

2. Elasticsearch 接続を確立する

Elasticsearch クエリを実行するには、まず接続を確立する必要があります。 Golang では、まず

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 成功")
}
ログイン後にコピー
ここでは、Elasticsearch のアドレスを

http://localhost:9200 として指定します。Elasticsearch が別のアドレスで実行されている場合は、アドレスを変更してください。

3. Elasticsearch データのクエリ

接続を確立した後、Elasticsearch クエリ操作を実行できます。 Golang の

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 メソッドを使用してリクエストを送信し、応答結果を受け取ります。

応答結果が間違っている場合は、JSON データを解析することでエラー情報を取得できます。応答にエラーがない場合は、ターミナルにクエリ結果が出力されます。

ここでは、

GET メソッドを使用してクエリ リクエストを送信していることに注意してください。実際、Elasticsearch は、GETPOSTPUT など、さまざまなクエリ リクエスト メソッドをサポートしています。特定のクエリ方法と構文については、Elasticsearch の公式ドキュメントを参照してください。

この記事で紹介する方法は、Elasticsearch の RESTful API をベースにしています。さらに、Elasticsearch は、公式に提供されている Golang ライブラリ

github.com/olivere/elastic を使用して、より柔軟で効率的なクエリ方法も提供します。より効率的なクエリ要件がある場合は、このライブラリの使用を検討してください。

つまり、Golang でのクエリに Elasticsearch を使用すると非常に便利で高速です。強力なデータ クエリ関数を実装するには、わずか数行のコードが必要です。開発者は Elasticsearch 関連テクノロジーにさらに注意を払い、データ ストレージとクエリ機能を改善することをお勧めします。

以上がElasticsearch クエリ操作に Golang を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート