9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

elastic公式 Go言語用Elasticsearchクライアント「go-elasticsearch (v0.0.0) 」

Last updated at Posted at 2019-03-31

公式Go言語用 elasticsearchクライアント

go-elasticsearch
2019年頭頃からElasticsearchを開発しているElastic社公式のGo言語用Elasticsearchクライアントの開発が始まっています。この記事の作成時点 (2019/03/31) ではまだv0.0.0 で開発中でした。
どこまで実装される予定なのかは不明ですが、検索クエリを作成する実装などは見当たりませんでしたが、エンドポイントでみると一通りのエンドポイントへのリクエスト用コードは実装されているようなので軽く使ってみました。

試してみる

まずREADME.mdに書いてあるとおり試してみる

package main

import (
	"log"

	"github.com/elastic/go-elasticsearch"
)

func main() {
	es, _ := elasticsearch.NewDefaultClient()
	log.Println(es.Info())
}

output
[200 OK] {
  "name" : "pf0bv5Y",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "kwg4riSOQUWDGUSYvXAcTw",
  "version" : {
    "number" : "6.3.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "424e937",
    "build_date" : "2018-06-11T23:38:03.357887Z",
    "build_snapshot" : false,
    "lucene_version" : "7.3.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

何も設定をする必要がない場合は

	es, _ := elasticsearch.NewDefaultClient()
	log.Println(es.Info())

これだけでEndpointへのリクエストができました。
パラメータをつけさえしなければGet系のAPIを行うコードは同じように実装できました。
_cat/indices APIのリクエスト

/_cat/indices
	es, _ := elasticsearch.NewDefaultClient()
	log.Println(es.Cat.Indices())
output
green open test_index_20190330 PzulHkoxS-CF2xDojnOrPQ 5 1 513 0 770.9kb 770.9kb
green open test_index_20190331 BJi44UEjTxyNXCDL3lAhJw 5 1 487 0 727.8kb 727.8kb
 <nil>

パラメータを付ける場合

_cat/indicesのリクエスト部分の実装を確認します。
go-elasticsearch api.cat.indices.go

es.Cat.Indices()の定義
type CatIndices func(o ...func(*CatIndicesRequest)) (*Response, error)

func (f CatIndices) WithContext(v context.Context) func(*CatIndicesRequest) {・・・}
func (f CatIndices) WithIndex(v ...string) func(*CatIndicesRequest) {・・・}
func (f CatIndices) WithV(v bool) func(*CatIndicesRequest) {・・・}

CatIndicesRequest
type CatIndicesRequest struct {
	Index []string

	Bytes         string
	Format        string
	H             []string
	Health        string
	Help          *bool
	Local         *bool
	MasterTimeout time.Duration
	Pri           *bool
	S             []string
	V             *bool

	Pretty     bool
	Human      bool
	ErrorTrace bool
	FilterPath []string

	ctx context.Context
}

エンドポイント毎にリクエスト構造体と パラメータ設定用の関数が用意されています。
クエリの指定の仕方は以下の2パターンあるようでした。

_cat/indices?v=true
	catIndices := es.Cat.Indices
	log.Println(catIndices(catIndices.WithV(true)))
_cat/indices?v=true
	req := esapi.CatIndicesRequest{
		V: esapi.BoolPtr(true),
	}
	ctx := context.Background()
	log.Println(req.Do(ctx, es))

READMEでは後者で書かれていました。

参考:

感想

エンドポイント毎にリクエスト構造体すでに用意されていて、検索やデータ作成など複雑なクエリが必要な箇所以外は使えるのでは。(ただし開発中)
検索、Bulkなど複雑なクエリ作成が簡単に実装できると嬉しい…

個人的に待ちに待った公式クライアントなので正式リリースバージョンが待ち遠しい。

まだ開発途中ですが、公式クライアント使いたいがためだけにElasticsearch CLI作ってみました。(2エンドポイント位しか動きませんが...)
https://github.com/bsoo/geso

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?