elasticsearch_hermes 0.0.4.2 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/elasticsearch_hermes.rb +4 -0
- data/lib/elasticsearch_hermes/configuration.rb +2 -3
- data/lib/elasticsearch_hermes/elasticsearch_hermes.rb +5 -11
- data/lib/elasticsearch_hermes/hook.rb +0 -3
- data/lib/elasticsearch_hermes/index.rb +8 -6
- data/lib/elasticsearch_hermes/indexing/helper.rb +24 -0
- data/lib/elasticsearch_hermes/indexing/model.rb +25 -0
- data/lib/elasticsearch_hermes/query.rb +38 -0
- data/lib/elasticsearch_hermes/result/base.rb +24 -0
- data/lib/elasticsearch_hermes/result/hit.rb +9 -0
- data/lib/elasticsearch_hermes/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b316c65bf4c95f6855434198e9961b1c7be60a06
|
4
|
+
data.tar.gz: 1385dc3839fbede3bdf1780b052bd3bf7596e402
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1f77c052089896350412915642063cd9afa4606320e4c0c61fa4490a1553275f631709f8b4aba6fd71245ccd09805bd55f89656a2de1e687e15e184ba18e44f
|
7
|
+
data.tar.gz: 33ba96fdd202c3ca06b70923f4e3ec997fbb680e8e0e557f417df3f54162c94ddcf3567274610f949d9d312cd32040ba6258ae6337f41d632d2a87c36dff939e
|
data/lib/elasticsearch_hermes.rb
CHANGED
@@ -5,6 +5,10 @@ require 'elasticsearch_hermes/railtie'
|
|
5
5
|
require 'elasticsearch_hermes/errors'
|
6
6
|
require 'elasticsearch_hermes/configuration'
|
7
7
|
require 'elasticsearch_hermes/index'
|
8
|
+
require 'elasticsearch_hermes/indexing/model'
|
9
|
+
require 'elasticsearch_hermes/indexing/helper'
|
10
|
+
require 'elasticsearch_hermes/query'
|
11
|
+
require 'elasticsearch_hermes/result/base'
|
8
12
|
require 'elasticsearch_hermes/hook'
|
9
13
|
require 'elasticsearch_hermes/logger'
|
10
14
|
require 'elasticsearch_hermes/elasticsearch_hermes'
|
@@ -3,15 +3,14 @@
|
|
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
|
7
7
|
def initialize
|
8
8
|
@request_timeout = nil
|
9
9
|
@retry_on_failure = nil
|
10
10
|
@es_user = nil
|
11
11
|
@es_password = nil
|
12
12
|
@es_url = nil
|
13
|
-
@enable_logs =
|
14
|
-
@fields = nil
|
13
|
+
@enable_logs = false
|
15
14
|
end
|
16
15
|
end
|
17
16
|
end
|
@@ -22,7 +22,11 @@ module ElasticsearchHermes
|
|
22
22
|
def self.default_connect_options
|
23
23
|
base_es_urls = configuration.es_url
|
24
24
|
urls = base_es_urls.split(',').compact.uniq
|
25
|
-
options = {
|
25
|
+
options = {
|
26
|
+
url: urls,
|
27
|
+
retry_on_failure: configuration.retry_on_failure,
|
28
|
+
log: configuration.enable_logs
|
29
|
+
}
|
26
30
|
options
|
27
31
|
end
|
28
32
|
|
@@ -34,19 +38,9 @@ module ElasticsearchHermes
|
|
34
38
|
configuration.fields
|
35
39
|
end
|
36
40
|
|
37
|
-
|
38
41
|
def self.connect!
|
39
42
|
return unless client
|
40
43
|
|
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
|
-
|
50
44
|
info = @client.info
|
51
45
|
cluster_version = info['version']['number']
|
52
46
|
msg = "Connected to Elastic version #{cluster_version}."
|
@@ -4,28 +4,30 @@ module ElasticsearchHermes
|
|
4
4
|
class Index
|
5
5
|
attr_reader :name
|
6
6
|
|
7
|
-
def initialize(name)
|
7
|
+
def initialize(name:, fields: [])
|
8
8
|
@name = name
|
9
|
+
@fields = fields
|
9
10
|
end
|
10
11
|
|
11
12
|
def create
|
12
13
|
ElasticsearchHermes.client.indices.create index: @name, body: index_options
|
13
14
|
end
|
14
15
|
|
16
|
+
def delete
|
17
|
+
ElasticsearchHermes.client.indices.delete index: @name
|
18
|
+
end
|
19
|
+
|
15
20
|
def exist?
|
16
21
|
ElasticsearchHermes.client.indices.exists? index: @name
|
17
22
|
end
|
18
23
|
|
19
|
-
|
20
|
-
ElasticsearchHermes.fields || []
|
21
|
-
end
|
24
|
+
private
|
22
25
|
|
23
26
|
def build_field_mappings
|
24
|
-
fields_to_index = fields.select { |field| field[:index_name] == @name }
|
25
27
|
properties = {}
|
26
28
|
analyzer = {}
|
27
29
|
tokenizer = {}
|
28
|
-
|
30
|
+
@fields.each do |field|
|
29
31
|
# add checks for full_match
|
30
32
|
if field[:search_type] == :partial_match
|
31
33
|
@field_token = ngram_builder(field[:minimum_match], field[:field_name])
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ElasticsearchHermes
|
4
|
+
module Indexing
|
5
|
+
module Helper
|
6
|
+
def re_index(index_name: to_s.underscore)
|
7
|
+
delete_index(index_name: index_name)
|
8
|
+
@index_object.create
|
9
|
+
all.find_each(&:touch)
|
10
|
+
end
|
11
|
+
|
12
|
+
def delete_index(index_name: to_s.underscore)
|
13
|
+
@index_object ||= ElasticsearchHermes::Index.new(name: index_name, fields: @fields)
|
14
|
+
@index_object.delete
|
15
|
+
rescue Elasticsearch::Transport::Transport::Errors::NotFound
|
16
|
+
Logger.log("No Such index: #{index_name}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def index_on(fields: [])
|
20
|
+
@fields = fields
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ElasticsearchHermes
|
4
|
+
module Indexing
|
5
|
+
module Model
|
6
|
+
def elastic_update(type: '_doc', index_name: self.class.to_s.underscore, id:, body:)
|
7
|
+
ElasticsearchHermes.client.index index_payload(
|
8
|
+
index_name: index_name,
|
9
|
+
type: type,
|
10
|
+
body: body,
|
11
|
+
id: id
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def index_payload(index_name:, type:, id:, body:)
|
16
|
+
{
|
17
|
+
type: type,
|
18
|
+
index: index_name,
|
19
|
+
id: id,
|
20
|
+
body: body
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ElasticsearchHermes
|
4
|
+
module Query
|
5
|
+
def search(query: '', index_name: to_s.underscore, fields: @hermes_search_on)
|
6
|
+
@results = ElasticsearchHermes.client.search query_payload(
|
7
|
+
query: query,
|
8
|
+
index_name: index_name,
|
9
|
+
fields: fields
|
10
|
+
)
|
11
|
+
ElasticsearchHermes::Result::Base.new(@results.symbolize_keys)
|
12
|
+
end
|
13
|
+
|
14
|
+
def hermes_search_on(fields: [])
|
15
|
+
@hermes_search_on ||= fields.map(&:to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
def search_type; end
|
19
|
+
|
20
|
+
def field_type; end
|
21
|
+
|
22
|
+
def minimum_match; end
|
23
|
+
|
24
|
+
def query_payload(query:, index_name:, fields:)
|
25
|
+
{
|
26
|
+
index: index_name,
|
27
|
+
body: {
|
28
|
+
query: {
|
29
|
+
multi_match: {
|
30
|
+
query: query,
|
31
|
+
fields: fields
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ElasticsearchHermes
|
4
|
+
module Result
|
5
|
+
class Base
|
6
|
+
attr_reader :took, :timed_out, :shards, :hits
|
7
|
+
|
8
|
+
def initialize(took:, timed_out:, hits:, _shards:)
|
9
|
+
@took = took
|
10
|
+
@timed_out = timed_out
|
11
|
+
@shards = _shards
|
12
|
+
@hits = hits
|
13
|
+
end
|
14
|
+
|
15
|
+
def ids
|
16
|
+
@ids ||= @hits['hits'].map { |hit| hit['_id'] }
|
17
|
+
end
|
18
|
+
|
19
|
+
def models
|
20
|
+
@models ||= ''
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
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
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ronald Ekambi
|
@@ -42,8 +42,13 @@ files:
|
|
42
42
|
- lib/elasticsearch_hermes/errors.rb
|
43
43
|
- lib/elasticsearch_hermes/hook.rb
|
44
44
|
- lib/elasticsearch_hermes/index.rb
|
45
|
+
- lib/elasticsearch_hermes/indexing/helper.rb
|
46
|
+
- lib/elasticsearch_hermes/indexing/model.rb
|
45
47
|
- lib/elasticsearch_hermes/logger.rb
|
48
|
+
- lib/elasticsearch_hermes/query.rb
|
46
49
|
- lib/elasticsearch_hermes/railtie.rb
|
50
|
+
- lib/elasticsearch_hermes/result/base.rb
|
51
|
+
- lib/elasticsearch_hermes/result/hit.rb
|
47
52
|
- lib/elasticsearch_hermes/version.rb
|
48
53
|
homepage: https://github.com/roncodingenthusiast/elasticsearch_hermes
|
49
54
|
licenses:
|
@@ -68,6 +73,5 @@ rubyforge_project:
|
|
68
73
|
rubygems_version: 2.6.14.3
|
69
74
|
signing_key:
|
70
75
|
specification_version: 4
|
71
|
-
summary:
|
72
|
-
complicated configuration of elastic
|
76
|
+
summary: I will fix this eventually
|
73
77
|
test_files: []
|