ElastomerClient 
Making a stupid simple Elasticsearch client so your project can be smarter!
Client
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.
Cluster
API endpoints dealing with cluster level information and settings are found in the Cluster class.
require 'elastomer_client/client'
client = ElastomerClient::Client.new
# the current health summary
client.cluster.health
# detailed cluster state information
client.cluster.state
# the list of all index templates
client.cluster.templatesIndex
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'
client = ElastomerClient::Client.new
index = client.index('books')
index.create(
:settings => { 'index.number_of_shards' => 3 },
:mappings => {
:_source => { :enabled => true },
:properties => {
:author => { :type => 'keyword' },
:title => { :type => 'text' }
}
}
)
index.exists?
index.deleteDocs
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'
client = ElastomerClient::Client.new
docs = client.docs('books')
docs.index({
:_id => 1,
:author => 'Mark Twain',
:title => 'The Adventures of Huckleberry Finn'
})
docs.search({:query => {:match_all => {}}})Performance
By default ElastomerClient 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 ElastomerClient initialization thusly:
ElastomerClient::Client.new(url: YOUR_ES_URL, adapter: :excon)Development
Get started by cloning and running a few scripts:
- Bootstrap the project
script/bootstrap
- Run ES in Docker (see below)
- Run tests
- for ES 8:
ES_PORT=9208 rake test - for ES 7:
ES_PORT=9207 rake test - for ES 5:
ES_PORT=9205 rake test
- for ES 8:
Run ES 5, ES 7, and ES 8:
cd docker
docker compose --profile all up
Run only ES 8:
cd docker
docker compose --profile es8 up
Run only ES 7:
cd docker
docker compose --profile es7 up
Run only ES 5:
cd docker
docker compose --profile es5 up
Releasing
- Create a new branch from
main - Bump the version number in
lib/elastomer_client/version.rb - Update
CHANGELOG.mdwith info about the new version - Execute
bin/rake build. This will place a new gem file in thepkg/folder. - Run
gem install pkg/elastomer-client-{VERSION}.gemto install the new gem locally - Start an
irbsession,require "elastomer_client/client"and make sure things work as you expect - Once everything is working as you expect, commit the version bump and open a PR
- Once you get approval and merge it to master, pull down a fresh copy of master and then...
- Run
rake release - If necessary, manually push the new version to rubygems.org
- πΊ π π

