Tags

By year

  1. 2014 (28)

Elasticsearch の私的なメモアレコレ

Elasticsearch Shell Ruby

Posted on Apr 24


はじめに

  • Elasticsearch を運用し始めてそれなりに運用っぽいことをし始めたのでメモ
  • あくまで私的なメモなのでもっと良い方法等あれば教えてください!


メモ

基本的にはクエリとか…。

Elasticsearch のインデックスを削除する

curl -XDELETE 'http://${ES_HOST}:9200/demo/tweet/1?pretty'

Elasticsearch へのデータ登録リクエスト

curl -XPUT 'http://${ES_HOST}:9200/demo/tweet/1' -d '{
  "user" : "hoge",
  "post_date" : "2014-04-04T00:01:00",
  "message" : "hogehoge"
}'

Elasticsearch へのデータ取得リクエスト

curl -XGET 'http://${ES_HOST}:9200/demo/tweet/1?pretty'

Elasticsearch のインデックス内のドキュメントに対する検索

curl -XGET 'http://${ES_HOST}:9200/demo/_search?q=hogehoge&pretty'

全ての index 名を取得する(要:jq)

curl -s http://${ES_HOST}:9200/_status | jq -r '.indices|keys[]'

-r は必須では無いがあったらデータだけが取得出来るのが嬉しい。



インデックスのメンテナンススクリプト

インデックスをメンテナンススクリプトを作ってみた。

github

とりあえず以下にアップした。


jq でインデックス名の一覧を取得するまでの苦労

http://${ES_HOST}:9200/_status でインデックス名を含む情報を取得することが出来るが、インデックス名だけを取り出す場合に jq でどーやればいいのか悩んだが…

結局はインデックス名は JOSN 的にはキーとなるので jqkeys 関数を使うことで解決した。

curl -s http://${ES_HOST}:9200/_status | jq -r '.indices|keys[]'

ちなみに length 関数を使えばインデックスの数を取得することが出来る。ちなみに Ruby で書くと以下のように書けると思う。

#!/usr/bin/env ruby

require 'net/http'
require 'json'

es = URI.parse('http://localhost:9200/_status')
request = Net::HTTP::Get.new(es.path)
respons = Net::HTTP.start(es.host, es.port) {|http|
  http.request(request)
}
respons_json = JSON.parse(respons.body)
respons_json["indices"].each do |index_name,date|
  puts "#{index_name}"
end

インデックスの数を取得したい場合には res_json["indices"].size とすれば取得出来る。ちなみに elasticsearch-ruby という gem もあるようだ。

curljq を使えば一行で書けてしまうが Ruby の場合には一行では済まない。用途や周囲の環境に応じて使い分けたい。



纏まってないまとめ

  • curl があれば Elasticsearch と気軽に会話が出来ますな
  • jq があればよりコミュニケーション力が高まるかも
  • ちょっと凝ったことをしようとすれば Ruby を使いましょう(頑張って)


2014 かっぱのほげふが