elasticsearch_hermes 0.0.4.1 → 0.0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc9f73e651b45f5a8e692dfc08bb441048290141
4
- data.tar.gz: d8a917eedaa40d3297eda5e9bb177ccd3da6a558
3
+ metadata.gz: 3923c6822a3a4f1f1fff0d0ba1bce68cbdda83c2
4
+ data.tar.gz: d15724eb798e20cfecbb0b641a71a8383eb516ff
5
5
  SHA512:
6
- metadata.gz: 82f7ddbc439c4813ce7e9af65d914fc1c4f9244c00b8d7f3d2294547b008f620c4e2cd05a25ab8815bb6a26312444cc37d419e5e483b13071929d243e9a4a205
7
- data.tar.gz: c0f4670d78afeafac6eb034c595d2049ce2720be5bcaab904c4d6d73d692438a684017b3c0dac648a29fda674f0e84ade8b650a244de34f200289484dd094310
6
+ metadata.gz: a7172c9c57053c493ec15d79b0ad302c71dc9ad2b4cb0151f1cdcab2cab1bfaa956445c73adf25651d2013e1154cbf112fe7e475c1cd34f920a02e22a3f772d5
7
+ data.tar.gz: 40e4a5ef7d2462610a57ad4fd5ea574345f414f9ade32e4921337ed63e7a7dd0ea5d8ab54470dda05a86937ab0a89efa083d6842fa3eefda3af3734a5f14ba1b
@@ -3,7 +3,7 @@
3
3
  module ElasticsearchHermes
4
4
  class Configuration
5
5
  attr_accessor :request_timeout, :retry_on_failure, :es_user, :es_password
6
- attr_accessor :es_url, :enable_logs
6
+ attr_accessor :es_url, :enable_logs, :fields
7
7
  def initialize
8
8
  @request_timeout = nil
9
9
  @retry_on_failure = nil
@@ -11,6 +11,7 @@ module ElasticsearchHermes
11
11
  @es_password = nil
12
12
  @es_url = nil
13
13
  @enable_logs = nil
14
+ @fields = nil
14
15
  end
15
16
  end
16
17
  end
@@ -30,9 +30,23 @@ module ElasticsearchHermes
30
30
  @client ||= ::Elasticsearch::Client.new(default_connect_options)
31
31
  end
32
32
 
33
+ def self.fields
34
+ configuration.fields
35
+ end
36
+
37
+
33
38
  def self.connect!
34
39
  return unless client
35
40
 
41
+
42
+ indices = fields.map { |field| field[:index_name] }.uniq
43
+
44
+ indices.each do |index|
45
+ Logger.log("Checking index #{index}")
46
+ index_s = ElasticsearchHermes::Index.new(index)
47
+ index_s.create unless index_s.exist?
48
+ end
49
+
36
50
  info = @client.info
37
51
  cluster_version = info['version']['number']
38
52
  msg = "Connected to Elastic version #{cluster_version}."
@@ -9,7 +9,89 @@ module ElasticsearchHermes
9
9
  end
10
10
 
11
11
  def create
12
- ElasticsearchHermes.client.indices.create index: name, body: {}
12
+ ElasticsearchHermes.client.indices.create index: @name, body: index_options
13
+ end
14
+
15
+ def exist?
16
+ ElasticsearchHermes.client.indices.exists? index: @name
17
+ end
18
+
19
+ def fields
20
+ ElasticsearchHermes.fields || []
21
+ end
22
+
23
+ def build_field_mappings
24
+ fields_to_index = fields.select { |field| field[:index_name] == @name }
25
+ properties = {}
26
+ analyzer = {}
27
+ tokenizer = {}
28
+ fields_to_index.each do |field|
29
+ # add checks for full_match
30
+ if field[:search_type] == :partial_match
31
+ @field_token = ngram_builder(field[:minimum_match], field[:field_name])
32
+ @field_analyzer = analyzer_builder(field[:field_name], 'custom', "#{field[:field_name]}_tokens", 'lowercase')
33
+ end
34
+
35
+ prop = {
36
+ "#{field[:field_name]}": {
37
+ type: field[:field_type],
38
+ analyzer: "#{field[:field_name]}_analyzer"
39
+ }
40
+ }
41
+
42
+ analyzer = analyzer.merge(@field_analyzer || {})
43
+ tokenizer = tokenizer.merge(@field_token || {})
44
+ properties = properties.merge(prop || {})
45
+ end
46
+
47
+ { properties: properties, analyzer: analyzer, tokenizer: tokenizer }
48
+ end
49
+
50
+ def index_options
51
+ field_mappings = build_field_mappings
52
+ {
53
+ settings: {
54
+ analysis: {
55
+ analyzer: field_mappings[:analyzer],
56
+ tokenizer: field_mappings[:tokenizer]
57
+ }
58
+ },
59
+ mappings: {
60
+ properties: field_mappings[:properties]
61
+ }
62
+ }
63
+ end
64
+
65
+ def field_mappings_builder(field_name, field_type, type_analyzer)
66
+ {
67
+ "#{field_name}": {
68
+ type: field_type,
69
+ analyzer: type_analyzer
70
+ }
71
+ }
72
+ end
73
+
74
+ def analyzer_builder(analyzer_name, analyzer_type, tokenizer, filter)
75
+ {
76
+ "#{analyzer_name}_analyzer": {
77
+ type: analyzer_type,
78
+ tokenizer: tokenizer,
79
+ filter: filter
80
+ }
81
+ }
82
+ end
83
+
84
+ def ngram_builder(number, field_name)
85
+ {
86
+ "#{field_name}_tokens": {
87
+ type: 'ngram',
88
+ min_gram: number,
89
+ max_gram: number,
90
+ token_chars: [
91
+ 'letter'
92
+ ]
93
+ }
94
+ }
13
95
  end
14
96
  end
15
97
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ElasticsearchHermes
4
- VERSION = '0.0.4.1'
4
+ VERSION = '0.0.4.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticsearch_hermes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.1
4
+ version: 0.0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ronald Ekambi