elastic-rails 0.8.7 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env +2 -0
- data/.travis.yml +19 -5
- data/Makefile +38 -0
- data/docker-compose.services.yml +16 -0
- data/elastic.gemspec +5 -6
- data/lib/elastic/commands/compare_mappings.rb +2 -2
- data/lib/elastic/commands/import_index_documents.rb +4 -16
- data/lib/elastic/core/base_middleware.rb +0 -4
- data/lib/elastic/core/connector.rb +32 -42
- data/lib/elastic/core/definition.rb +16 -29
- data/lib/elastic/core/serializer.rb +1 -1
- data/lib/elastic/datatypes/default.rb +1 -1
- data/lib/elastic/datatypes/string.rb +6 -0
- data/lib/elastic/datatypes/term.rb +1 -2
- data/lib/elastic/fields/value.rb +2 -2
- data/lib/elastic/nodes/concerns/hit_provider.rb +0 -1
- data/lib/elastic/nodes/match.rb +3 -2
- data/lib/elastic/query.rb +2 -6
- data/lib/elastic/railties/ar_helpers.rb +2 -2
- data/lib/elastic/results/hit.rb +2 -3
- data/lib/elastic/shims/populating.rb +7 -13
- data/lib/elastic/type.rb +0 -1
- data/lib/elastic/types/base_type.rb +2 -6
- data/lib/elastic/version.rb +1 -1
- metadata +28 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 415d01e7f57e3202b889d41df8942d3fe5347173
|
4
|
+
data.tar.gz: 96661427d521dc54ae86178cf20529099e900c32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac05b2d5170f2e112d0b90c3e80cbb44730f1983f69e9d344140ea13e6127501ad926809c38ec1747f7caf8dc8972d6d5ba42596333c77c083ea4681193e998d
|
7
|
+
data.tar.gz: 776bdcb23a31e9694538104d7572b72ca810467402500f3b4a3e9e8d3224364836fce0c106f05af0f9b67982f403a92409d5576658658783a671daeb3d1ef32c
|
data/.env
ADDED
data/.travis.yml
CHANGED
@@ -1,8 +1,22 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
3
|
+
- 2.6.2
|
4
|
+
- 2.5.3
|
5
|
+
- 2.4.1
|
6
|
+
- 2.3.7
|
6
7
|
services:
|
7
|
-
-
|
8
|
-
before_install:
|
8
|
+
- docker
|
9
|
+
before_install:
|
10
|
+
- gem update bundler
|
11
|
+
- docker -v
|
12
|
+
- make services-up
|
13
|
+
- sleep 10
|
14
|
+
deploy:
|
15
|
+
provider: rubygems
|
16
|
+
api_key:
|
17
|
+
secure: Ucdb3YW5+gBFBxhZylqacER9xdu/oP4lmu6JqiWIL95IdNwQEyh45llBmRxYnsyb1WdaFlu35EbkgFZyerfWBtSKl5xjxkEJH7xRjfA/Ait19YGd9jdrVGSPXMZodf8+Q4GQe47Q934AsR/YLZ/g6cDUsEwhsYVoCmVWR5SICCdaTI98K2Pt4/W2CEcucSNzb4tWptj7noreCTQL4iLodTC7x4MMk2wscNFCKZUW5J2HCB8eds6pK7hYTt5wjo+ARJdkFvYlanJ7bOBFGLGps3UP4Rj5K3h2hM+7nGwt4yddDLYMaBwfwjpfo4f4ayX7pnMvwfn3WCfD9f4ps430WbSqPOvuHLAxcO7th6EOoLmS0/5RDFL+Gk96WHgr51A5RdPUoN3O1Qa4sl6nsPCJmC64mR7Mm62ZYeYCvUXgf7cZYzX7/dLIK2u0pkRQa3axkZgR+COcmAImZL8ffSNxOFRpQPPBNWoEZhlOTXwKmkSJjfiWYvCUGRmx3DFM1Tra88ctWkLh3B77wcDFBtUZEmA8KYS+ies8ctQyndHtzU1oJ2gxOD3Ye64fWRprZl+ApeFNTgBlu+kMe/vs8i504ERBur421iOqbnfP3IDqIuizC5zkSXG2JEAT1rvLtuf2tBuTbB6h/jYZtFssboXENlw++ZopIO5ZAbFaXMxBPPc=
|
18
|
+
gem: elastic-rails
|
19
|
+
on:
|
20
|
+
tags: true
|
21
|
+
repo: platanus/elastic-rails
|
22
|
+
branch: master
|
data/Makefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
PROJECT ?= elastic-rails
|
2
|
+
DOCKER_COMPOSE_FILE ?= docker-compose.services.yml
|
3
|
+
DOCKER_COMPOSE_ARGS ?= -p $(PROJECT) -f $(DOCKER_COMPOSE_FILE)
|
4
|
+
SHELL := /bin/bash
|
5
|
+
|
6
|
+
run: help
|
7
|
+
|
8
|
+
BOLD ?= $(shell tput bold)
|
9
|
+
NORMAL ?= $(shell tput sgr0)
|
10
|
+
|
11
|
+
help:
|
12
|
+
@echo Run elasticsearch for development:
|
13
|
+
@echo " ${BOLD}make services-up${NORMAL}"
|
14
|
+
@echo ""
|
15
|
+
@echo "Reset the environment:"
|
16
|
+
@echo " ${BOLD}make services-destroy${NORMAL}"
|
17
|
+
@echo ""
|
18
|
+
|
19
|
+
services: services-up
|
20
|
+
|
21
|
+
services-ps:
|
22
|
+
docker-compose $(DOCKER_COMPOSE_ARGS) ps
|
23
|
+
|
24
|
+
services-up:
|
25
|
+
docker-compose $(DOCKER_COMPOSE_ARGS) up -d
|
26
|
+
|
27
|
+
services-stop:
|
28
|
+
docker-compose $(DOCKER_COMPOSE_ARGS) stop
|
29
|
+
|
30
|
+
services-destroy:
|
31
|
+
docker-compose $(DOCKER_COMPOSE_ARGS) down --volumes
|
32
|
+
|
33
|
+
services-logs:
|
34
|
+
docker-compose $(DOCKER_COMPOSE_ARGS) logs -f
|
35
|
+
|
36
|
+
services-port:
|
37
|
+
@set -o pipefail; \
|
38
|
+
docker-compose $(DOCKER_COMPOSE_ARGS) port ${SERVICE} ${PORT} 2> /dev/null | cut -d':' -f2 || echo ${PORT}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
version: '3'
|
2
|
+
|
3
|
+
services:
|
4
|
+
elasticsearch:
|
5
|
+
image: elasticsearch:6.7.0
|
6
|
+
ports:
|
7
|
+
- 9200
|
8
|
+
volumes:
|
9
|
+
- elasticsearch_data:/usr/share/elasticsearch/data
|
10
|
+
environment:
|
11
|
+
- discovery.type=single-node
|
12
|
+
- bootstrap.memory_lock=true
|
13
|
+
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
|
14
|
+
|
15
|
+
volumes:
|
16
|
+
elasticsearch_data:
|
data/elastic.gemspec
CHANGED
@@ -19,18 +19,17 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_dependency "elasticsearch", "~>
|
22
|
+
spec.add_dependency "elasticsearch", "~> 6.3.1"
|
23
23
|
spec.add_dependency "activesupport"
|
24
24
|
|
25
|
-
spec.add_development_dependency "
|
25
|
+
spec.add_development_dependency "dotenv"
|
26
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
26
27
|
spec.add_development_dependency "rake", "~> 10.4"
|
27
28
|
spec.add_development_dependency "rspec", "~> 3.1"
|
28
29
|
spec.add_development_dependency "rspec-nc", "~> 0.2"
|
29
30
|
spec.add_development_dependency "guard", "~> 2.11"
|
30
31
|
spec.add_development_dependency "guard-rspec", "~> 4.5"
|
31
32
|
spec.add_development_dependency "terminal-notifier-guard", "~> 1.6", ">= 1.6.1"
|
32
|
-
spec.add_development_dependency "pry", "~> 0.
|
33
|
-
spec.add_development_dependency "pry-
|
34
|
-
spec.add_development_dependency "pry-byebug", "~> 3.2"
|
35
|
-
spec.add_development_dependency "pry-nav", "~> 0.2"
|
33
|
+
spec.add_development_dependency "pry", "~> 0.12.2"
|
34
|
+
spec.add_development_dependency "pry-nav", "~> 0.3.0"
|
36
35
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Elastic::Commands
|
2
2
|
class CompareMappings < Elastic::Support::Command.new(:current, :user)
|
3
3
|
def perform
|
4
|
-
user_properties.
|
5
|
-
|
4
|
+
user_properties.reject do |field, property|
|
5
|
+
compare_field_properties(current_properties[field], property)
|
6
6
|
end.map { |f| f[0] }
|
7
7
|
end
|
8
8
|
|
@@ -4,23 +4,15 @@ module Elastic::Commands
|
|
4
4
|
)
|
5
5
|
def perform
|
6
6
|
if collection.present?
|
7
|
-
|
7
|
+
target.collect_from(collection, middleware_options) { |obj| queue obj }
|
8
8
|
else
|
9
|
-
|
9
|
+
target.collect_all(middleware_options) { |obj| queue obj }
|
10
10
|
end
|
11
11
|
flush
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
def import_collection
|
17
|
-
main_target.collect_from(collection, middleware_options) { |obj| queue obj }
|
18
|
-
end
|
19
|
-
|
20
|
-
def import_target(_target)
|
21
|
-
_target.collect_all(middleware_options) { |obj| queue obj }
|
22
|
-
end
|
23
|
-
|
24
16
|
def cache
|
25
17
|
@cache ||= []
|
26
18
|
end
|
@@ -48,12 +40,8 @@ module Elastic::Commands
|
|
48
40
|
index.new(_object).as_elastic_document
|
49
41
|
end
|
50
42
|
|
51
|
-
def
|
52
|
-
index.definition.
|
53
|
-
end
|
54
|
-
|
55
|
-
def targets
|
56
|
-
index.definition.targets
|
43
|
+
def target
|
44
|
+
index.definition.target
|
57
45
|
end
|
58
46
|
|
59
47
|
def middleware_options
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module Elastic::Core
|
2
2
|
class Connector
|
3
|
-
|
3
|
+
DEFAULT_TYPE = '_doc'
|
4
|
+
|
5
|
+
def initialize(_name, _mapping, settling_time: 10.seconds)
|
4
6
|
@name = _name
|
5
|
-
@types = _types
|
6
7
|
@mapping = _mapping
|
7
8
|
@settling_time = settling_time
|
8
9
|
end
|
@@ -17,6 +18,7 @@ module Elastic::Core
|
|
17
18
|
actual_name = resolve_actual_index_name
|
18
19
|
return :not_available if actual_name.nil?
|
19
20
|
return :not_synchronized unless mapping_synchronized? actual_name
|
21
|
+
|
20
22
|
:ready
|
21
23
|
end
|
22
24
|
|
@@ -31,7 +33,7 @@ module Elastic::Core
|
|
31
33
|
create_from_scratch
|
32
34
|
when :not_synchronized
|
33
35
|
begin
|
34
|
-
|
36
|
+
setup_index_mapping resolve_actual_index_name
|
35
37
|
rescue Elasticsearch::Transport::Transport::Errors::BadRequest
|
36
38
|
return false
|
37
39
|
end
|
@@ -46,7 +48,6 @@ module Elastic::Core
|
|
46
48
|
copy_to new_index, batch_size: batch_size
|
47
49
|
end
|
48
50
|
end
|
49
|
-
|
50
51
|
nil
|
51
52
|
end
|
52
53
|
|
@@ -55,7 +56,7 @@ module Elastic::Core
|
|
55
56
|
|
56
57
|
# TODO: validate document type
|
57
58
|
operations = write_indices.map do |write_index|
|
58
|
-
{ 'index' => _document.merge('_index' => write_index) }
|
59
|
+
{ 'index' => _document.merge('_index' => write_index, '_type' => DEFAULT_TYPE) }
|
59
60
|
end
|
60
61
|
|
61
62
|
api.bulk(body: operations)
|
@@ -65,7 +66,7 @@ module Elastic::Core
|
|
65
66
|
return if Elastic.config.disable_indexing
|
66
67
|
|
67
68
|
# TODO: validate documents type
|
68
|
-
body = _documents.map { |doc| { 'index' => doc } }
|
69
|
+
body = _documents.map { |doc| { 'index' => doc.merge('_type' => DEFAULT_TYPE) } }
|
69
70
|
|
70
71
|
write_indices.each do |write_index|
|
71
72
|
retry_on_temporary_error('bulk indexing') do
|
@@ -76,20 +77,18 @@ module Elastic::Core
|
|
76
77
|
|
77
78
|
def delete(_document)
|
78
79
|
raise ArgumentError, 'document must provide an id' unless _document['_id']
|
79
|
-
raise ArgumentError, 'document must provide a type' unless _document['_type']
|
80
80
|
|
81
81
|
return if Elastic.config.disable_indexing
|
82
82
|
|
83
83
|
write_index, rolling_index = write_indices
|
84
84
|
|
85
|
-
operations = [{
|
85
|
+
operations = [{
|
86
|
+
'delete' => _document.merge('_index' => write_index, '_type' => DEFAULT_TYPE)
|
87
|
+
}]
|
86
88
|
|
87
89
|
if rolling_index
|
88
90
|
operations << {
|
89
|
-
'
|
90
|
-
'_index' => rolling_index,
|
91
|
-
'data' => { '_mark_for_deletion' => true }
|
92
|
-
)
|
91
|
+
'delete' => _document.merge('_index' => rolling_index, '_type' => DEFAULT_TYPE)
|
93
92
|
}
|
94
93
|
end
|
95
94
|
|
@@ -100,16 +99,16 @@ module Elastic::Core
|
|
100
99
|
api.indices.refresh index: index_name
|
101
100
|
end
|
102
101
|
|
103
|
-
def find(
|
104
|
-
api.get(index: index_name,
|
102
|
+
def find(_id)
|
103
|
+
api.get(index: index_name, id: _id)
|
105
104
|
end
|
106
105
|
|
107
|
-
def count(query: nil
|
108
|
-
api.count(index: index_name,
|
106
|
+
def count(query: nil)
|
107
|
+
api.count(index: index_name, body: query)['count']
|
109
108
|
end
|
110
109
|
|
111
|
-
def query(query: nil
|
112
|
-
api.search(index: index_name,
|
110
|
+
def query(query: nil)
|
111
|
+
api.search(index: index_name, body: query)
|
113
112
|
end
|
114
113
|
|
115
114
|
def rollover(&_block) # rubocop:disable Metrics/MethodLength
|
@@ -125,12 +124,11 @@ module Elastic::Core
|
|
125
124
|
transfer_alias(write_index_alias, to: new_index)
|
126
125
|
wait_for_index_to_stabilize
|
127
126
|
perform_optimized_write_on(new_index, &_block)
|
128
|
-
delete_marked_for_deletion new_index
|
129
127
|
transfer_alias(index_name, from: actual_index, to: new_index)
|
130
128
|
transfer_alias(write_index_alias, from: actual_index)
|
131
129
|
wait_for_index_to_stabilize
|
132
130
|
api.indices.delete index: actual_index
|
133
|
-
rescue
|
131
|
+
rescue StandardError
|
134
132
|
api.indices.delete index: new_index
|
135
133
|
raise
|
136
134
|
end
|
@@ -170,7 +168,8 @@ module Elastic::Core
|
|
170
168
|
private
|
171
169
|
|
172
170
|
def wait_for_index_to_stabilize
|
173
|
-
return if @settling_time
|
171
|
+
return if @settling_time.zero?
|
172
|
+
|
174
173
|
Elastic.logger.info "Waiting #{@settling_time * 1.2}s for write indices to catch up ..."
|
175
174
|
sleep(@settling_time * 1.2)
|
176
175
|
end
|
@@ -212,10 +211,6 @@ module Elastic::Core
|
|
212
211
|
end
|
213
212
|
end
|
214
213
|
|
215
|
-
def delete_marked_for_deletion(_index)
|
216
|
-
api.delete_by_query(index: _index, body: { query: { term: { _mark_for_deletion: true } } })
|
217
|
-
end
|
218
|
-
|
219
214
|
def write_indices_expired?
|
220
215
|
@write_indices_expiration && @write_indices_expiration < Time.current
|
221
216
|
end
|
@@ -231,7 +226,7 @@ module Elastic::Core
|
|
231
226
|
new_name = "#{index_name}:#{Time.now.to_i}"
|
232
227
|
api.indices.create index: new_name
|
233
228
|
api.cluster.health wait_for_status: 'yellow'
|
234
|
-
|
229
|
+
setup_index_mapping new_name
|
235
230
|
new_name
|
236
231
|
end
|
237
232
|
|
@@ -248,25 +243,20 @@ module Elastic::Core
|
|
248
243
|
end
|
249
244
|
|
250
245
|
def mapping_synchronized?(_index)
|
251
|
-
type_mappings = api.indices.get_mapping(index: _index)
|
246
|
+
type_mappings = api.indices.get_mapping(index: _index, include_type_name: false)
|
252
247
|
return false if type_mappings[_index].nil?
|
253
|
-
|
248
|
+
return false if type_mappings[_index]['mappings'].empty?
|
254
249
|
|
255
|
-
|
256
|
-
|
250
|
+
diff = Elastic::Commands::CompareMappings.for(
|
251
|
+
current: type_mappings[_index]['mappings'],
|
252
|
+
user: @mapping
|
253
|
+
)
|
257
254
|
|
258
|
-
|
259
|
-
current: type_mappings[type],
|
260
|
-
user: @mapping
|
261
|
-
)
|
262
|
-
diff.empty?
|
263
|
-
end
|
255
|
+
diff.empty?
|
264
256
|
end
|
265
257
|
|
266
|
-
def
|
267
|
-
|
268
|
-
api.indices.put_mapping(index: _index, type: type, body: @mapping)
|
269
|
-
end
|
258
|
+
def setup_index_mapping(_index)
|
259
|
+
api.indices.put_mapping(index: _index, type: DEFAULT_TYPE, body: @mapping)
|
270
260
|
end
|
271
261
|
|
272
262
|
def transfer_alias(_alias, from: nil, to: nil)
|
@@ -284,7 +274,7 @@ module Elastic::Core
|
|
284
274
|
{
|
285
275
|
'create' => {
|
286
276
|
'_id' => _hit['_id'],
|
287
|
-
'_type' =>
|
277
|
+
'_type' => DEFAULT_TYPE,
|
288
278
|
'data' => _hit['_source']
|
289
279
|
}
|
290
280
|
}
|
@@ -295,7 +285,7 @@ module Elastic::Core
|
|
295
285
|
end
|
296
286
|
|
297
287
|
def retry_on_temporary_error(_action, retries: 3)
|
298
|
-
|
288
|
+
yield
|
299
289
|
rescue Elasticsearch::Transport::Transport::Errors::ServiceUnavailable,
|
300
290
|
Elasticsearch::Transport::Transport::Errors::GatewayTimeout => exc
|
301
291
|
raise if retries <= 0
|
@@ -2,29 +2,22 @@ module Elastic::Core
|
|
2
2
|
class Definition
|
3
3
|
attr_reader :middleware_options
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
end
|
5
|
+
def target
|
6
|
+
raise 'attempting to access target before definition has been frozen' if @target_cache.nil?
|
8
7
|
|
9
|
-
def targets
|
10
|
-
raise 'attempting to access targets before definition has been frozen' if @target_cache.nil?
|
11
8
|
@target_cache
|
12
9
|
end
|
13
10
|
|
14
|
-
def
|
15
|
-
@
|
16
|
-
end
|
17
|
-
|
18
|
-
def types
|
19
|
-
targets.map(&:type_name)
|
11
|
+
def target=(_value)
|
12
|
+
@target = _value
|
20
13
|
end
|
21
14
|
|
22
15
|
def mode
|
23
|
-
|
16
|
+
target.mode
|
24
17
|
end
|
25
18
|
|
26
19
|
def initialize
|
27
|
-
@
|
20
|
+
@target = nil
|
28
21
|
@field_map = {}
|
29
22
|
@field_cache = {}
|
30
23
|
@middleware_options = HashWithIndifferentAccess.new
|
@@ -40,7 +33,8 @@ module Elastic::Core
|
|
40
33
|
|
41
34
|
def freeze
|
42
35
|
return if frozen?
|
43
|
-
|
36
|
+
|
37
|
+
cache_target
|
44
38
|
complete_and_validate_fields
|
45
39
|
freeze_fields
|
46
40
|
@middleware_options.freeze
|
@@ -81,26 +75,19 @@ module Elastic::Core
|
|
81
75
|
else
|
82
76
|
parent = @field_map[_name[0...separator]]
|
83
77
|
return nil if parent.nil?
|
78
|
+
|
84
79
|
parent.get_field(_name[separator + 1..-1])
|
85
80
|
end
|
86
81
|
end
|
87
82
|
|
88
|
-
def
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
def load_targets
|
93
|
-
mode = nil
|
94
|
-
@targets.map do |target|
|
95
|
-
target = target.to_s.camelize.constantize if target.is_a?(Symbol) || target.is_a?(String)
|
83
|
+
def cache_target
|
84
|
+
target = @target
|
85
|
+
target = target.to_s.camelize.constantize if @target.is_a?(Symbol) || @target.is_a?(String)
|
86
|
+
target = load_target_middleware(target) unless target.class < BaseMiddleware
|
96
87
|
|
97
|
-
|
98
|
-
raise 'index target is not indexable' if target.nil?
|
99
|
-
raise 'mistmatching indexable mode' if mode && mode != target.mode
|
100
|
-
mode = target.mode
|
88
|
+
raise 'index target is not indexable' if target.nil?
|
101
89
|
|
102
|
-
|
103
|
-
end
|
90
|
+
@target_cache = target
|
104
91
|
end
|
105
92
|
|
106
93
|
def complete_and_validate_fields
|
@@ -127,7 +114,7 @@ module Elastic::Core
|
|
127
114
|
end
|
128
115
|
|
129
116
|
def infer_mapping_options(_name)
|
130
|
-
|
117
|
+
target.field_options_for(_name, middleware_options)
|
131
118
|
end
|
132
119
|
end
|
133
120
|
end
|
@@ -17,7 +17,7 @@ module Elastic::Core
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def as_elastic_document(only_meta: false)
|
20
|
-
result = {
|
20
|
+
result = {}
|
21
21
|
result['_id'] = read_attribute_for_indexing(:id) if has_attribute_for_indexing?(:id)
|
22
22
|
result['data'] = as_elastic_source unless only_meta
|
23
23
|
result
|
data/lib/elastic/fields/value.rb
CHANGED
@@ -84,9 +84,9 @@ module Elastic::Fields
|
|
84
84
|
def load_registered_datatype(_name)
|
85
85
|
# TODO: replace this with a datatype registry
|
86
86
|
case _name
|
87
|
-
when :term
|
87
|
+
when :term, :keyword
|
88
88
|
Elastic::Datatypes::Term
|
89
|
-
when :string
|
89
|
+
when :string, :text
|
90
90
|
Elastic::Datatypes::String
|
91
91
|
when :date
|
92
92
|
Elastic::Datatypes::Date
|
data/lib/elastic/nodes/match.rb
CHANGED
@@ -29,9 +29,10 @@ module Elastic::Nodes
|
|
29
29
|
|
30
30
|
def render(_options = {})
|
31
31
|
hash = { 'query' => @query }
|
32
|
-
hash['type'] = @mode.to_s unless @mode.nil? || @mode == :boolean
|
33
32
|
|
34
|
-
|
33
|
+
match_mode = @mode.nil? || @mode == :boolean ? 'match' : "match_#{@mode}"
|
34
|
+
|
35
|
+
{ match_mode => { render_field(_options) => render_boost(hash) } }
|
35
36
|
end
|
36
37
|
|
37
38
|
private
|
data/lib/elastic/query.rb
CHANGED
@@ -35,7 +35,7 @@ module Elastic
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def ids
|
38
|
+
def ids
|
39
39
|
execute assembler.assemble_ids
|
40
40
|
end
|
41
41
|
|
@@ -87,11 +87,7 @@ module Elastic
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def execute(_query)
|
90
|
-
raw = @index.connector.query(
|
91
|
-
type: @index.definition.types,
|
92
|
-
query: _query.render
|
93
|
-
)
|
94
|
-
|
90
|
+
raw = @index.connector.query(query: _query.render)
|
95
91
|
_query.handle_result(raw, formatter)
|
96
92
|
end
|
97
93
|
|
@@ -38,8 +38,8 @@ module Elastic::Railties
|
|
38
38
|
# rubocop:disable Metrics/CyclomaticComplexity
|
39
39
|
def ar_type_to_options(_type)
|
40
40
|
case _type.try(:to_sym)
|
41
|
-
when :text then { type: :
|
42
|
-
when :string then { type: :
|
41
|
+
when :text then { type: :text }
|
42
|
+
when :string then { type: :keyword }
|
43
43
|
when :integer then { type: :long } # not sure..
|
44
44
|
when :float, :decimal then { type: :double } # not sure..
|
45
45
|
when :date then { type: :date }
|
data/lib/elastic/results/hit.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
module Elastic::Results
|
2
2
|
class Hit < Base
|
3
|
-
attr_reader :
|
3
|
+
attr_reader :id, :score, :source
|
4
4
|
attr_accessor :data
|
5
5
|
|
6
|
-
def initialize(
|
7
|
-
@type = _type
|
6
|
+
def initialize(_id, _score, _source)
|
8
7
|
@id = _id
|
9
8
|
@score = _score
|
10
9
|
@source = _source
|
@@ -26,21 +26,15 @@ module Elastic::Shims
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def populate(_result)
|
29
|
-
|
30
|
-
groups.each { |t, h| populate_group(t, h) }
|
31
|
-
end
|
32
|
-
|
33
|
-
def populate_group(_type_name, _hits)
|
34
|
-
target = resolve_target(_type_name)
|
35
|
-
raise "Unexpected type name #{_type_name}" if target.nil?
|
29
|
+
hits = _result.pick(Elastic::Results::Hit).to_a
|
36
30
|
|
37
31
|
if populate_by_id?
|
38
|
-
ids =
|
32
|
+
ids = hits.map(&:id)
|
39
33
|
objects = target.find_by_ids(ids, middleware_options)
|
40
|
-
objects.each_with_index { |o, i|
|
34
|
+
objects.each_with_index { |o, i| hits[i].data = o }
|
41
35
|
else
|
42
|
-
|
43
|
-
hit.data = target.build_from_data(hit.source, middleware_options)
|
36
|
+
hits.each do |hit|
|
37
|
+
hit.data = @index.definition.target.build_from_data(hit.source, middleware_options)
|
44
38
|
end
|
45
39
|
end
|
46
40
|
end
|
@@ -49,8 +43,8 @@ module Elastic::Shims
|
|
49
43
|
@index.definition.mode == :index
|
50
44
|
end
|
51
45
|
|
52
|
-
def
|
53
|
-
@index.definition.
|
46
|
+
def target
|
47
|
+
@index.definition.target
|
54
48
|
end
|
55
49
|
|
56
50
|
def middleware_options
|
data/lib/elastic/type.rb
CHANGED
@@ -1,16 +1,12 @@
|
|
1
1
|
module Elastic::Types
|
2
2
|
class BaseType < Elastic::Core::Serializer
|
3
3
|
def self.target=(_name_or_class)
|
4
|
-
pre_definition.
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.targets=(_names_or_classes)
|
8
|
-
pre_definition.targets = _names_or_classes
|
4
|
+
pre_definition.target = _name_or_class
|
9
5
|
end
|
10
6
|
|
11
7
|
def self.pre_definition
|
12
8
|
@pre_definition ||= Elastic::Core::Definition.new.tap do |definition|
|
13
|
-
definition.
|
9
|
+
definition.target = default_target unless default_target.nil?
|
14
10
|
end
|
15
11
|
end
|
16
12
|
|
data/lib/elastic/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elastic-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ignacio Baixas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: elasticsearch
|
@@ -16,20 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 1.0.18
|
19
|
+
version: 6.3.1
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 1.0.18
|
26
|
+
version: 6.3.1
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: activesupport
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,20 +38,34 @@ dependencies:
|
|
44
38
|
- - ">="
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dotenv
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: bundler
|
49
57
|
requirement: !ruby/object:Gem::Requirement
|
50
58
|
requirements:
|
51
59
|
- - "~>"
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
61
|
+
version: '2.0'
|
54
62
|
type: :development
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
65
|
requirements:
|
58
66
|
- - "~>"
|
59
67
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
68
|
+
version: '2.0'
|
61
69
|
- !ruby/object:Gem::Dependency
|
62
70
|
name: rake
|
63
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,56 +162,28 @@ dependencies:
|
|
154
162
|
requirements:
|
155
163
|
- - "~>"
|
156
164
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
165
|
+
version: 0.12.2
|
158
166
|
type: :development
|
159
167
|
prerelease: false
|
160
168
|
version_requirements: !ruby/object:Gem::Requirement
|
161
169
|
requirements:
|
162
170
|
- - "~>"
|
163
171
|
- !ruby/object:Gem::Version
|
164
|
-
version:
|
165
|
-
- !ruby/object:Gem::Dependency
|
166
|
-
name: pry-remote
|
167
|
-
requirement: !ruby/object:Gem::Requirement
|
168
|
-
requirements:
|
169
|
-
- - "~>"
|
170
|
-
- !ruby/object:Gem::Version
|
171
|
-
version: '0.1'
|
172
|
-
type: :development
|
173
|
-
prerelease: false
|
174
|
-
version_requirements: !ruby/object:Gem::Requirement
|
175
|
-
requirements:
|
176
|
-
- - "~>"
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
version: '0.1'
|
179
|
-
- !ruby/object:Gem::Dependency
|
180
|
-
name: pry-byebug
|
181
|
-
requirement: !ruby/object:Gem::Requirement
|
182
|
-
requirements:
|
183
|
-
- - "~>"
|
184
|
-
- !ruby/object:Gem::Version
|
185
|
-
version: '3.2'
|
186
|
-
type: :development
|
187
|
-
prerelease: false
|
188
|
-
version_requirements: !ruby/object:Gem::Requirement
|
189
|
-
requirements:
|
190
|
-
- - "~>"
|
191
|
-
- !ruby/object:Gem::Version
|
192
|
-
version: '3.2'
|
172
|
+
version: 0.12.2
|
193
173
|
- !ruby/object:Gem::Dependency
|
194
174
|
name: pry-nav
|
195
175
|
requirement: !ruby/object:Gem::Requirement
|
196
176
|
requirements:
|
197
177
|
- - "~>"
|
198
178
|
- !ruby/object:Gem::Version
|
199
|
-
version:
|
179
|
+
version: 0.3.0
|
200
180
|
type: :development
|
201
181
|
prerelease: false
|
202
182
|
version_requirements: !ruby/object:Gem::Requirement
|
203
183
|
requirements:
|
204
184
|
- - "~>"
|
205
185
|
- !ruby/object:Gem::Version
|
206
|
-
version:
|
186
|
+
version: 0.3.0
|
207
187
|
description: Elasticsearch integration for Ruby on Rails by Platanus
|
208
188
|
email:
|
209
189
|
- ignacio@platan.us
|
@@ -211,6 +191,7 @@ executables: []
|
|
211
191
|
extensions: []
|
212
192
|
extra_rdoc_files: []
|
213
193
|
files:
|
194
|
+
- ".env"
|
214
195
|
- ".gitignore"
|
215
196
|
- ".rspec"
|
216
197
|
- ".travis.yml"
|
@@ -218,10 +199,12 @@ files:
|
|
218
199
|
- Gemfile
|
219
200
|
- Guardfile
|
220
201
|
- LICENSE.txt
|
202
|
+
- Makefile
|
221
203
|
- README.md
|
222
204
|
- Rakefile
|
223
205
|
- bin/console
|
224
206
|
- bin/setup
|
207
|
+
- docker-compose.services.yml
|
225
208
|
- elastic.gemspec
|
226
209
|
- lib/elastic-rails.rb
|
227
210
|
- lib/elastic.rb
|
@@ -348,7 +331,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
348
331
|
version: '0'
|
349
332
|
requirements: []
|
350
333
|
rubyforge_project:
|
351
|
-
rubygems_version: 2.6.
|
334
|
+
rubygems_version: 2.6.14.1
|
352
335
|
signing_key:
|
353
336
|
specification_version: 4
|
354
337
|
summary: Elasticsearch integration for Ruby on Rails by Platanus
|