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 かっぱのほげふが