theablefew / stretchy

Elasticsearch Models for Rails with an ActiveRecord-like behavior
https://theablefew.github.io/stretchy/#/
MIT License
2 stars 0 forks source link

Add `IndexSetting` #105

Closed esmarkowski closed 3 months ago

esmarkowski commented 3 months ago

Add organization to define index settings. Can be passed in through

Model.index_settings(Analysis.as_json)

class Analysis < Stretchy::IndexSetting

    filter :my_stemmer,
                name: :light_english,
                type: :stemmer

    filter :word_delimiter_graph_filter,
                type: :word_delimiter_graph,
                preserve_original: true

    filter :edge_ngram_filter, 
                type: :edge_ngram,
                min_gram: 2,
                max_gram: 40

    analyzer :default, 
                    filter: [
                        :lowercase,
                        :my_stemmer
                    ],
                    tokenizer: :standard

    analyzer :path_analyzer, 
                    filter: [
                        :lowercase,
                        :asciifolding
                    ],
                    type: :custom,
                    tokenizer: :path_tokenizer

    analyzer :code_analyzer, 
                    filter: [
                        :word_delimiter_graph_filter,
                        :flatten_graph,
                        :lowercase,
                        :asciifolding,
                        :edge_ngram_filter
                    ],
                    type: :custom,
                    tokenizer: :whitespace

    analyzer :my_ngram_analyzer, 
                    filter: [:lowercase],
                    tokenizer: :my_ngram_tokenizer

    analyzer :whitespace_reverse, 
                    tokenizer: :whitespace,
                    filter: [:lowercase, :asciifolding, :reverse]

    tokenizer :my_ngram_tokenizer, 
                    token_chars: [:letter,:digit],
                    min_gram: 2,
                    max_gram: 3
                    type: :ngram

    tokenizer :path_tokenizer, 
                    reverse: true,
                    type: :path_hierarchy

    normalizer :sha_normalizer, 
                    filter: [:lowercase],
                    type: :custom

end