Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Elastomer Client Build Status

Making a stupid simple Elasticsearch client so your project can be smarter!

Getting Started

Get started by cloning and running a few scripts:

$ git clone
$ cd elastomer-client
$ script/bootstrap
$ bundle exec rake test


The client provides a one-to-one mapping to the Elasticsearch API endpoints. The API is decomposed into logical sections and accessed according to what you are trying to accomplish. Each logical section is represented as a client class and a top-level accessor is provided for each.


API endpoints dealing with cluster level information and settings are found in the Cluster class.

require 'elastomer/client'
client =

# the current health summary

# detailed cluster state information

# the list of all index templates


The methods in the Index class deal with the management of indexes in the cluster. This includes setting up type mappings and adjusting settings. The actual indexing and search of documents are handled by the Docs class (discussed next).

require 'elastomer/client'
client =

index = client.index('twitter')
  :settings => { 'index.number_of_shards' => 3 },
  :mappings => {
    :tweet => {
      :_source => { :enabled => true },
      :_all    => { :enabled => false },
      :properties => {
        :author => { :type => 'string', :index => 'not_analyzed' },
        :tweet  => { :type => 'string', :analyze => 'standard' }


index.exists? :type => 'tweet'



The Docs class handles the indexing and searching of documents. Each instance is scoped to an index and optionally a document type.

require 'elastomer/client'
client =

docs ='twitter')

  :_id    => 1,
  :_type  => 'tweet',
  :author => '@pea53',
  :tweet  => 'announcing Elastomer, the stupid simple Elasticsearch client'
}){:query => {:match_all => {}}}, :size => 0)


By default Elastomer uses Net::HTTP (via Faraday) to communicate with Elasticsearch. You may find that Excon performs better for your use. To enable Excon, add it to your bundle and then change your Elastomer initialization thusly: YOUR_ES_URL, adapter: :excon)


  1. Create a new branch from master
  2. Bump the version number in lib/elastomer/version.rb
  3. Update with info about the new version
  4. Execute bin/rake build. This will place a new gem file in the pkg/ folder.
  5. Run gem install pkg/elastomer-client-{VERSION}.gem to install the new gem locally
  6. Start an irb session, require "elastomer/client" and make sure things work as you expect
  7. Once everything is working as you expect, commit the version bump and open a PR
  8. Once you get approval and merge it to master, pull down a fresh copy of master and then...
  9. Run rake release
  10. If necessary, manually push the new version to
  11. 🕺 💃 🎉