diff --git a/.rubocop.yml b/.rubocop.yml index b5a5de3..eb7f1ff 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -15,7 +15,7 @@ inherit_gem: - config/ruby-3.0.yml AllCops: - TargetRubyVersion: 3.2 + TargetRubyVersion: 3.0 NewCops: enable Exclude: - '**/vendor/**/*' diff --git a/README.yml b/README.yml deleted file mode 100644 index 1f82b6f..0000000 --- a/README.yml +++ /dev/null @@ -1,2 +0,0 @@ -title: Home -icon: home \ No newline at end of file diff --git a/index.md b/index.md new file mode 100644 index 0000000..e8e8675 --- /dev/null +++ b/index.md @@ -0,0 +1,66 @@ +# Caoutsearch [\ˈkawt͡ˈsɝtʃ\\](http://ipa-reader.xyz/?text=ˈkawt͡ˈsɝtʃ) + +[![Gem Version](https://badge.fury.io/rb/caoutsearch.svg)](https://rubygems.org/gems/caoutsearch) +[![CI Status](https://github.com/solutions-territoire/caoutsearch/actions/workflows/ci.yml/badge.svg)](https://github.com/solutions-territoire/caoutsearch/actions/workflows/ci.yml) +[![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard) +[![Maintainability](https://api.codeclimate.com/v1/badges/fbe73db3fd8be9a10e12/maintainability)](https://codeclimate.com/github/solutions-territoire/caoutsearch/maintainability) +[![Test Coverage](https://api.codeclimate.com/v1/badges/fbe73db3fd8be9a10e12/test_coverage)](https://codeclimate.com/github/solutions-territoire/caoutsearch/test_coverage) + +[![JRuby](https://github.com/solutions-territoire/caoutsearch/actions/workflows/jruby.yml/badge.svg)](https://github.com/solutions-territoire/caoutsearch/actions/workflows/jruby.yml) +[![Truffle Ruby](https://github.com/solutions-territoire/caoutsearch/actions/workflows/truffle_ruby.yml/badge.svg)](https://github.com/solutions-territoire/caoutsearch/actions/workflows/truffle_ruby.yml) + +**!! Gem under development before public release !!** + +Caoutsearch is a new Elasticsearch integration for Ruby and/or Rails. +It provides a simple but powerful DSL to perform complex indexing and searching, while securely exposing search criteria to a public and chainable API, without overwhelming your models. + +Caoutsearch only supports Elasticsearch 8.x right now. +It is used in production in a robust application, updated and maintained for several years at [Solutions & Territoire](https://solutions-territoire.fr). + +Caoutsearch was inspired by awesome gems such as [elasticsearch-rails](https://github.com/elastic/elasticsearch-rails) or [search_flip](https://github.com/mrkamel/search_flip). +Depending on your search scenarios, they may better suite your needs. + +## Overview + +Caoutsearch let you create `Index` and `Search` classes to manipulate your data : + +```ruby +class ArticleIndex < Caoutsearch::Index::Base + property :title + property :published_on + property :tags + + def tags + records.tags.public.map(&:to_s) + end +end +``` + +```ruby +class ArticleSearch < Caoutsearch::Search::Base + filter :title, as: :match + filter :published_on, as: :date + filter :tags + + has_aggregation :popular_tags, { + filter: { term: { published: true } }, + aggs: { + published: { + terms: { field: :tags, size: 10 } + } + } + } +end +``` + +You can then index your records + +```ruby +ArticleIndex.reindex +``` + +Or search through them: + +```ruby +ArticleSearch.search(published_on: [["now-1y", nil]]).aggregate(:popular_tags) +``` diff --git a/index.yml b/index.yml new file mode 100644 index 0000000..46b4056 --- /dev/null +++ b/index.yml @@ -0,0 +1,2 @@ +title: Overview +icon: home \ No newline at end of file diff --git a/retype.yml b/retype.yml index 68e0106..5918880 100644 --- a/retype.yml +++ b/retype.yml @@ -28,4 +28,12 @@ links: # target: blank footer: - copyright: "© 2023 [Solutions & Territoire](https://solutions-territoire.fr) - [MIT License](https://github.com/solutions-territoire/caoutsearch/blob/main/LICENSE)" \ No newline at end of file + copyright: "© 2023 [Solutions & Territoire](https://solutions-territoire.fr) - [MIT License](https://github.com/solutions-territoire/caoutsearch/blob/main/LICENSE)" + +edit: + base: docs + +exclude: + - "README.md" + - "release_instruction.md" + - "retype_instruction.md" \ No newline at end of file