Posted on Apr 24
Elasticsearch を運用し始めてそれなりに運用っぽいことをし始めたのでメモ基本的にはクエリとか…。
curl -XDELETE 'http://${ES_HOST}:9200/demo/tweet/1?pretty'
curl -XPUT 'http://${ES_HOST}:9200/demo/tweet/1' -d '{
"user" : "hoge",
"post_date" : "2014-04-04T00:01:00",
"message" : "hogehoge"
}'
curl -XGET 'http://${ES_HOST}:9200/demo/tweet/1?pretty'
curl -XGET 'http://${ES_HOST}:9200/demo/_search?q=hogehoge&pretty'
curl -s http://${ES_HOST}:9200/_status | jq -r '.indices|keys[]'
-r は必須では無いがあったらデータだけが取得出来るのが嬉しい。
インデックスをメンテナンススクリプトを作ってみた。
とりあえず以下にアップした。
http://${ES_HOST}:9200/_status でインデックス名を含む情報を取得することが出来るが、インデックス名だけを取り出す場合に jq でどーやればいいのか悩んだが…
結局はインデックス名は JOSN 的にはキーとなるので jq の keys 関数を使うことで解決した。
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 もあるようだ。
curl と jq を使えば一行で書けてしまうが Ruby の場合には一行では済まない。用途や周囲の環境に応じて使い分けたい。
curl があれば Elasticsearch と気軽に会話が出来ますなjq があればよりコミュニケーション力が高まるかもRuby を使いましょう(頑張って)2014 かっぱのほげふが