Elasticated
Elasticsearch Wrapper, with Query & Mapping Builders
HOW TO instantiate a repository
repository = Elasticated::Repository.new
repository = Elasticated::Repository.new host: 'http://user:pass@192.168.1.2:9200'
repository = Elasticated::Repository.new host: 'myhost', index: 'myindex', type: 'mytype'
HOW TO build a query
query = Query.build do
filter do
equal :first_name, 'Pablo'
end
conditions do
between :age, 20, 25
must_not do
wildcard :second_name, 'Santiago*'
end
should do
gt :age, 23
lt :age, 22
end
minimum_should_match 1
end
post do
equal :city, 'CABA'
end
aggregations do
group :register_number, size: 10
end
from 5
size 15
end
query.build
HOW TO execute a search
repository = Repository.new
query = Query.new
repository.execute_count query
repository.execute_search query
repository.execute_aggregations query
repository.execute_aggregated_search query
repository.delete_by query
repository.exists? query
HOW TO build a document and index it
document = Document.create do |doc|
doc.id = 'my_unique_id'
doc.index = 'myindex'
doc.type = 'mytype'
doc.source = { user: 'Pablo', some_field: 'some_value' }
end
repository = Repository.new
repository.index_document document
HOW TO build a document and (partially) update it
repository = Repository.new
repository.update_document 'my_unique_id', type: 'mytype', index: 'myindex', source: { new_field: 'New data' }
HOW TO get a document (or multiple documents) by id
repository = Repository.new
document = repository.get_document 'my_unique_id', type: 'mytype', index: 'myindex'
documents = repository.get_documents ['id1', 'id2', 'id3'], type: 'mytype', index: 'myindex'
HOW TO delete a document by id
repository = Repository.new
repository.delete_document 'my_unique_id', type: 'mytype', index: 'myindex'
HOW TO execute a bulk request
repository = Repository.new
document = Document.create id: 'my_id', type: 'my_type', index: 'my_index', source: { name: 'Pablo' }
bulk_request = repository.prepare_bulk do
index_document d
delete_document 'my_id', type: 'my_type', index: 'my_index'
upsert_document 'my_id', type: 'my_type', index: 'my_index', source: { name: 'Santiago' }
update_document 'my_id', type: 'my_type', index: 'my_index', source: { age: 24 }
create_document d
end
response = repository.execute_bulk bulk_request
HOW TO start a resumable scroll
repository = Elasticated::Repository.new
query = Elasticated::Query.new
search = repository.prepare_search query, index: 'my_index', type: 'my_type'
results = search.start
scroll_id = search.scroll_id
HOW TO resume a scroll
repository = Elasticated::Repository.new
scroll_id = '...'
search = repository.restore_search scroll_id
results = search.fetch
results.append search.fetch until search.completed?
HOW TO build a mapping
mapping = Elasticated::Mapping.build do
type :content do
date :date
string :user
analyzed_string :user_alias
nested :user_purchases do
long :purchase_id
string :items
end
object :user_info do
string :address
end
end
end
mapping.to_h
HOW TO configure the gem
Elasticated.configure do |config|
config.logger = Elasticated::Loggers::DefaultLogger.new
config.scroll_expiration_time = '3m'
config.scroll_page_size = 500
config.search_page_size = 1000
config.transport_options.request_timeout = 5*60
end
HOW TO configure some specific repository
repository = Repository.new
repository.logger = Elasticated::Loggers::DefaultLogger.new
repository.scroll_expiration_time = '3m'
repository.scroll_page_size = 500
repository.search_page_size = 1000