Class: ElasticsearchHermes::Index
- Inherits:
-
Object
- Object
- ElasticsearchHermes::Index
- Defined in:
- lib/elasticsearch_hermes/index.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #analyzer_builder(analyzer_name, analyzer_type, tokenizer, filter) ⇒ Object
- #build_field_mappings ⇒ Object
- #create ⇒ Object
- #exist? ⇒ Boolean
- #field_mappings_builder(field_name, field_type, type_analyzer) ⇒ Object
- #fields ⇒ Object
- #index_options ⇒ Object
-
#initialize(name) ⇒ Index
constructor
A new instance of Index.
- #ngram_builder(number, field_name) ⇒ Object
Constructor Details
#initialize(name) ⇒ Index
Returns a new instance of Index.
7 8 9 |
# File 'lib/elasticsearch_hermes/index.rb', line 7 def initialize(name) @name = name end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
5 6 7 |
# File 'lib/elasticsearch_hermes/index.rb', line 5 def name @name end |
Instance Method Details
#analyzer_builder(analyzer_name, analyzer_type, tokenizer, filter) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/elasticsearch_hermes/index.rb', line 74 def analyzer_builder(analyzer_name, analyzer_type, tokenizer, filter) { "#{analyzer_name}_analyzer": { type: analyzer_type, tokenizer: tokenizer, filter: filter } } end |
#build_field_mappings ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/elasticsearch_hermes/index.rb', line 23 def build_field_mappings fields_to_index = fields.select { |field| field[:index_name] == @name } properties = {} analyzer = {} tokenizer = {} fields_to_index.each do |field| # add checks for full_match if field[:search_type] == :partial_match @field_token = ngram_builder(field[:minimum_match], field[:field_name]) @field_analyzer = analyzer_builder(field[:field_name], 'custom', "#{field[:field_name]}_tokens", 'lowercase') end prop = { "#{field[:field_name]}": { type: field[:field_type], analyzer: "#{field[:field_name]}_analyzer" } } analyzer = analyzer.merge(@field_analyzer || {}) tokenizer = tokenizer.merge(@field_token || {}) properties = properties.merge(prop || {}) end { properties: properties, analyzer: analyzer, tokenizer: tokenizer } end |
#create ⇒ Object
11 12 13 |
# File 'lib/elasticsearch_hermes/index.rb', line 11 def create ElasticsearchHermes.client.indices.create index: @name, body: end |
#exist? ⇒ Boolean
15 16 17 |
# File 'lib/elasticsearch_hermes/index.rb', line 15 def exist? ElasticsearchHermes.client.indices.exists? index: @name end |
#field_mappings_builder(field_name, field_type, type_analyzer) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/elasticsearch_hermes/index.rb', line 65 def field_mappings_builder(field_name, field_type, type_analyzer) { "#{field_name}": { type: field_type, analyzer: type_analyzer } } end |
#fields ⇒ Object
19 20 21 |
# File 'lib/elasticsearch_hermes/index.rb', line 19 def fields ElasticsearchHermes.fields || [] end |
#index_options ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/elasticsearch_hermes/index.rb', line 50 def field_mappings = build_field_mappings { settings: { analysis: { analyzer: field_mappings[:analyzer], tokenizer: field_mappings[:tokenizer] } }, mappings: { properties: field_mappings[:properties] } } end |
#ngram_builder(number, field_name) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/elasticsearch_hermes/index.rb', line 84 def ngram_builder(number, field_name) { "#{field_name}_tokens": { type: 'ngram', min_gram: number, max_gram: number, token_chars: [ 'letter' ] } } end |