class ElasticsearchHermes::Index
Attributes
name[R]
Public Class Methods
new(name:, fields: [])
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 7 def initialize(name:, fields: []) @name = name @fields = fields end
Public Instance Methods
create()
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 12 def create ElasticsearchHermes.client.indices.create index: @name, body: index_options end
delete()
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 16 def delete ElasticsearchHermes.client.indices.delete index: @name end
exist?()
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 20 def exist? ElasticsearchHermes.client.indices.exists? index: @name end
Private Instance Methods
analyzer_builder(analyzer_name, analyzer_type, tokenizer, filter)
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 76 def analyzer_builder(analyzer_name, analyzer_type, tokenizer, filter) { "#{analyzer_name}_analyzer": { type: analyzer_type, tokenizer: tokenizer, filter: filter } } end
build_field_mappings()
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 26 def build_field_mappings properties = {} analyzer = {} tokenizer = {} @fields.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
field_mappings_builder(field_name, field_type, type_analyzer)
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 67 def field_mappings_builder(field_name, field_type, type_analyzer) { "#{field_name}": { type: field_type, analyzer: type_analyzer } } end
index_options()
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 52 def index_options 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)
click to toggle source
# File lib/elasticsearch_hermes/index.rb, line 86 def ngram_builder(number, field_name) { "#{field_name}_tokens": { type: 'ngram', min_gram: number, max_gram: number, token_chars: [ 'letter' ] } } end