爆速でGo!

GoGo!

GAE/Goからelasticsearchへ接続する

クライアントライブラリの選定

以上の2つが候補としてあげられます。どちらかというとGoらしく書ける印象だった2つ目のolivere/elasticを今回は使用します。

クライアントの生成

olivere/elasticは使用しているelasticsearchのバージョンごとにライブラリのブランチも切られています。
今回はelasticsearchバージョン5を使用しているので、gopkg.in/olivere/elastic.v5をimportして使用します。

import (
        elastic "gopkg.in/olivere/elastic.v5"
       "google.golang.org/appengine/urlfetch"
)

const ESURL = "https://35.174.182"

func main(){
    c := context.Background
    httpCli := urlfetch.Client(c) // URL Fetch Serviceの使用
    cli, err := elastic.NewClient(elastic.SetURL(ESURL), elastic.SetHttpClient(httpCli)) // clientの生成
    if err != nil {
        panic(err)
    }
}

NewClient(options ...ClientOptionFunc) (*Client, error)を呼び出すことによってクライアントを生成します。
ClientOptionFunc型の値を引数に与えることによってクライアントの設定を行います。

URL Fetch Service

GAE/Goから外部にリクエストを送る場合は、URL Fetch Serviceを使用します。
そのため、NewClient時にHTTPクライアントをurlfetch.Clientに差し替える必要があります。

操作

先程生成したクライアントを使用してelasticsearchのデータを操作していきます。
詳しくはwikiを参照して下さい。

func main(){
    cli.Start()
    defer cli.Stop()

    // ドキュメントの追加
    _, err := cli.Index().
        Index("index").
        Type("type").
        Id("id").
        BodyJson(struct{}).
        Do(c)

    // ドキュメントの削除
    _, err := cli.Delete().
        Index("index").
        Type("type").
        Id("id").
        Do(c)

}