theablefew/stretchy
Elasticsearch Models for Rails with an ActiveRecord-like behavior
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,scopesandaggregations - 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-modelIf bundler is not being used to manage dependencies, install the gem by executing:
gem install stretchy-modelTip
If using OpenSearch make sure to add the gem to your Gemfile.
bundle add opensearch-ruby
Rails Configuration
rails credentials:editAdd elasticsearch credentials
elasticsearch:
url: localhost:9200
# or if using opensearch
# opensearch:
# host: https://localhost:9200
# user: admin
# password: admin
# transport_options:
# ssl:
# verify: falseCreate 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
endDevelopment
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
Act
Run github action workflow locally
brew install act --HEADact -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:runner-latestElasticsearch
docker-compose up elasticsearch
bundle exec rspec
Opensearch
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.
