ElasticsearchにRubyから接続してあれこれしたいっ!

Elasticsearchはすでにインストール済み(CentOS7でElasticsearchを使いたいっ!)で、起動もしてます。

elasticsearch(gem)をインストール

最終的にはGemfileに追加してbundle installする予定ですが、まずは動かしてみる。

gem install elasticsearch

indexの追加

indexは、ドキュメントを追加すると一緒に追加されるので明示的にindexだけを追加することはあまりないかもしれませんが

require 'elasticsearch'
client = Elasticsearch::Client.new({log: true, url: 'localhost:9200' })

client.indices.create index: 'test'

indexの存在確認

require 'elasticsearch'
client = Elasticsearch::Client.new({log: true, url: 'localhost:9200' })

result = client.indices.exists index: 'test'
puts result ? 'ある' : 'ない'

indexの削除

require 'elasticsearch'
client = Elasticsearch::Client.new({log: true, url: 'localhost:9200' })

client.indices.delete index: 'test'

ドキュメントを追加してみる

require 'elasticsearch'
client = Elasticsearch::Client.new({log: true, url: 'localhost:9200' })

client.create({
  index: 'test',
  type: 'foo',
  id: 1,
  body: {
    name: '太郎'
  }
})

ドキュメントを取得してみる

require 'elasticsearch'
client = Elasticsearch::Client.new({log: true, url: 'localhost:9200' })

test = client.search({
  index: 'test',
  query: {
    term: {
      _id: 1
    }
  }
})

ドキュメントを更新してみる(1)

require 'elasticsearch'
client = Elasticsearch::Client.new({log: true, url: 'localhost:9200' })

client.update_by_query({
  index: 'test',
  type: 'foo',
  conflicts: 'proceed',
  body: {
    query: {
      term: {
        _id: 1
      }
    },
    script: {
      source: "ctx._source.name = '次郎'"
    }
  }
})

ドキュメントを更新してみる(2)

こっちのほうがシンプルかも。

require 'elasticsearch'
client = Elasticsearch::Client.new({log: true, url: 'localhost:9200' })

client.update_by_query({
  index: 'test',
  type: 'foo',
  id: 1,
  body: {
    doc: {
      name: '次郎'
    }
  }
})