stretchy-model
Stretchy provides Elasticsearch/Opensearch models in Rails applications with an Rails-like model interface.
Features
Stretchy simplifies the process of querying, aggregating, and managing Elasticsearch-backed models, allowing Rails developers to work with search indices as comfortably as they would with traditional Rails models.
- Models fully back by Elasticsearch/Opensearch
- Chain
queries
,scopes
andaggregations
- Reduce Elasticsearch query complexity
- Support for time-based indices and aliases
- Associations to both ActiveRecord models and
StretchyModel
- Bulk Operations made easy
- Ingest and Search Pipelines
- Machine Learning
- Vector and Neural search
- Integrated RAG and LLM connectors
- Validations, custom attributes, and more...
Follow the guides to learn more about:
Read the Documentation or follow the examples below:
Examples
- Data Analysis example.
- Simple Ingest Pipeline
Installation
Install the gem and add to the application's Gemfile by executing:
bundle add stretchy-model
If bundler is not being used to manage dependencies, install the gem by executing:
gem install stretchy-model
Tip
If using OpenSearch make sure to add the gem to your Gemfile.
bundle add opensearch-ruby
rails credentials:edit
Add elasticsearch credentials
elasticsearch:
url: localhost:9200
# or if using opensearch
# opensearch:
# host: https://localhost:9200
# user: admin
# password: admin
# transport_options:
# ssl:
# verify: false
Create an initializer
config/initializers/stretchy.rb
Stretchy.configure do |config|
config.client = Elasticsearch::Client.new Rails.application.credentials.elasticsearch
# or if using OpenSearch
# config.client = OpenSearch::Client.new Rails.application.credentials.opensearch
end
Development
After checking out the repo, run bin/setup
to install dependencies. You can also run bin/console
for an interactive prompt that will allow you to experiment.
Tip
Full documentation on Elasticsearch Query DSL and Aggregation options
Testing
Run github action workflow locally
brew install act --HEAD
act -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:runner-latest
docker-compose up elasticsearch
bundle exec rspec
docker-compose up opensearch
ENV['BACKEND']=opensearch bundle rspec
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/theablefew/stretchy. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
License
The gem is available as open source under the terms of the MIT License.