search_flip 2.0.0.beta7 → 2.0.0.beta8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/.travis.yml +2 -1
- data/CHANGELOG.md +10 -0
- data/README.md +30 -30
- data/UPDATING.md +40 -0
- data/docker-compose.yml +2 -0
- data/lib/search_flip/connection.rb +17 -8
- data/lib/search_flip/index.rb +31 -20
- data/lib/search_flip/response.rb +1 -1
- data/lib/search_flip/version.rb +1 -1
- data/spec/search_flip/connection_spec.rb +19 -2
- data/spec/search_flip/index_spec.rb +93 -27
- data/spec/spec_helper.rb +15 -19
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f9a9b030a56e1b3688964be50aed6c66cbe367239a7377c37ebc2045180d4ed
|
4
|
+
data.tar.gz: d1a90f539bf2b63d708bcc415b1fb5fae95d967fd539a73f716e10ef04c86754
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08a14b0c86bcf6744c4dfba020959c6c2fe9002a20ae8c2866cbc745cbe7ea002369c954a3441caaaf07d31bdcc4e68e8ab0ad6a52c236d5bb5f994db6643c5e'
|
7
|
+
data.tar.gz: bd9f9aa18dc818bd1da8a2ce9d70e38abc6919bf359508b4d0344195cff9546964bfcfa30345fd8b7ff28c86746b352e21c78530f2e3e0522d108e1bc5338574
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -5,7 +5,8 @@ env:
|
|
5
5
|
- ES_IMAGE=elasticsearch:1
|
6
6
|
- ES_IMAGE=plainpicture/elasticsearch:2.4.1_delete-by-query
|
7
7
|
- ES_IMAGE=elasticsearch:5.4
|
8
|
-
- ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:6.
|
8
|
+
- ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:6.7.0
|
9
|
+
- ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:7.0.0
|
9
10
|
rvm:
|
10
11
|
- ruby-head
|
11
12
|
before_install:
|
data/CHANGELOG.md
CHANGED
@@ -9,10 +9,20 @@
|
|
9
9
|
* [BREAKING] Changed `SearchFlip.aliases` to `SearchFlip::Connection#update_aliases`
|
10
10
|
* [BREAKING] Changed `SearchFlip.msearch` to `SearchFlip::Connection#msearch`
|
11
11
|
* [BREAKING] Removed `base_url` param from `SearchFlip::Critiera#execute`
|
12
|
+
* [BREAKING] `SearchFlip::Index.index_name` no longer defaults to `SearchFlip::Index.type_name`
|
13
|
+
* [BREAKING] No longer include the type name in `SearchFlip::Index.mapping`
|
12
14
|
* Added `SearchFlip::Connection#get_aliases`
|
13
15
|
* Added `SearchFlip::Connection#get_indices`
|
14
16
|
* Added `SearchFlip::Connection#alias_exists?`
|
15
17
|
* Added `SearchFlip::Index#with_settings` and `SearchFlip::Criteria#with_settings`
|
18
|
+
* Added `SearchFlip::Aggregation#merge`
|
19
|
+
* Added `bulk_max_mb` config and option
|
20
|
+
* Added `SearchFlip::Index.analyze`
|
21
|
+
* Added `SearchFlip::Criteria#preference`
|
22
|
+
* Added `SearchFlip::Criteria#search_type`
|
23
|
+
* Added `SearchFlip::Criteria#routing`
|
24
|
+
* Added `SearchFlip::Index.open_index` and `SearchFlip::Index.close_index`
|
25
|
+
* Added `SearchFlip::Index.mget`
|
16
26
|
|
17
27
|
## v1.1.0
|
18
28
|
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
Using SearchFlip it is dead-simple to create index classes that correspond to
|
10
10
|
[ElasticSearch](https://www.elastic.co/) indices and to manipulate, query and
|
11
11
|
aggregate these indices using a chainable, concise, yet powerful DSL. Finally,
|
12
|
-
SearchFlip supports ElasticSearch 1.x, 2.x, 5.x, 6.x. Check section
|
12
|
+
SearchFlip supports ElasticSearch 1.x, 2.x, 5.x, 6.x, 7.x. Check section
|
13
13
|
[Feature Support](#feature-support) for version dependent features.
|
14
14
|
|
15
15
|
```ruby
|
@@ -51,6 +51,9 @@ CommentIndex.where(available: true).search("hello world").sort(id: "desc").aggre
|
|
51
51
|
|
52
52
|
```
|
53
53
|
|
54
|
+
Finally, SearchFlip comes with a minimal set of dependencies (http-rb, hashie
|
55
|
+
and oj only).
|
56
|
+
|
54
57
|
## Reference Docs
|
55
58
|
|
56
59
|
SearchFlip has a great documentation.
|
@@ -89,10 +92,10 @@ Available config options are:
|
|
89
92
|
|
90
93
|
* `index_prefix` to have a prefix added to your index names automatically. This
|
91
94
|
can be useful to separate the indices of e.g. testing and development environments.
|
92
|
-
* `base_url` to tell
|
95
|
+
* `base_url` to tell SearchFlip how to connect to your cluster
|
93
96
|
* `bulk_limit` a global limit for bulk requests
|
94
97
|
* `bulk_max_mb` a global limit for the payload of bulk requests
|
95
|
-
* `auto_refresh` tells
|
98
|
+
* `auto_refresh` tells SearchFlip to automatically refresh an index after
|
96
99
|
import, index, delete, etc operations. This is e.g. usuful for testing, etc.
|
97
100
|
Defaults to false.
|
98
101
|
|
@@ -106,14 +109,14 @@ class CommentIndex
|
|
106
109
|
end
|
107
110
|
```
|
108
111
|
|
109
|
-
Then tell the Index about the
|
112
|
+
Then tell the Index about the index name, the correspoding model and how to
|
110
113
|
serialize the model for indexing.
|
111
114
|
|
112
115
|
```ruby
|
113
116
|
class CommentIndex
|
114
117
|
include SearchFlip::Index
|
115
118
|
|
116
|
-
def self.
|
119
|
+
def self.index_name
|
117
120
|
"comments"
|
118
121
|
end
|
119
122
|
|
@@ -132,42 +135,37 @@ class CommentIndex
|
|
132
135
|
end
|
133
136
|
```
|
134
137
|
|
135
|
-
|
136
|
-
|
137
|
-
`#index`, etc. This can be used to preload associations that are used when
|
138
|
-
serializing records or to restrict the records you want to index.
|
138
|
+
Optionally, you can specify a custom `type_name`, but note that starting with
|
139
|
+
Elasticsearch 7, types are deprecated.
|
139
140
|
|
140
141
|
```ruby
|
141
142
|
class CommentIndex
|
142
143
|
# ...
|
143
144
|
|
144
|
-
def self.
|
145
|
-
|
145
|
+
def self.type_name
|
146
|
+
"comment"
|
146
147
|
end
|
147
148
|
end
|
148
|
-
|
149
|
-
CommentIndex.import(Comment.all) # => CommentIndex.import(Comment.all.preload(:user))
|
150
149
|
```
|
151
150
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
Simply supply a custom `index_name`.
|
151
|
+
You can additionally specify an `index_scope` which will automatically be
|
152
|
+
applied to scopes, eg. ActiveRecord::Relation objects, passed to `#import`,
|
153
|
+
`#index`, etc. This can be used to preload associations that are used when
|
154
|
+
serializing records or to restrict the records you want to index.
|
157
155
|
|
158
156
|
```ruby
|
159
157
|
class CommentIndex
|
160
158
|
# ...
|
161
159
|
|
162
|
-
def self.
|
163
|
-
|
160
|
+
def self.index_scope(scope)
|
161
|
+
scope.preload(:user)
|
164
162
|
end
|
165
|
-
|
166
|
-
# ...
|
167
163
|
end
|
164
|
+
|
165
|
+
CommentIndex.import(Comment.all) # => CommentIndex.import(Comment.all.preload(:user))
|
168
166
|
```
|
169
167
|
|
170
|
-
|
168
|
+
To specify a custom mapping:
|
171
169
|
|
172
170
|
```ruby
|
173
171
|
class CommentIndex
|
@@ -175,10 +173,8 @@ class CommentIndex
|
|
175
173
|
|
176
174
|
def self.mapping
|
177
175
|
{
|
178
|
-
|
179
|
-
|
180
|
-
# ...
|
181
|
-
}
|
176
|
+
properties: {
|
177
|
+
# ...
|
182
178
|
}
|
183
179
|
}
|
184
180
|
end
|
@@ -187,7 +183,11 @@ class CommentIndex
|
|
187
183
|
end
|
188
184
|
```
|
189
185
|
|
190
|
-
|
186
|
+
Please note that you need to specify the mapping without a type name, even for
|
187
|
+
Elasticsearch versions before 7, as SearchFlip will add the type name
|
188
|
+
automatically if neccessary.
|
189
|
+
|
190
|
+
To specify index settings:
|
191
191
|
|
192
192
|
```ruby
|
193
193
|
def self.index_settings
|
@@ -250,8 +250,8 @@ CommentIndex.match_all.delete
|
|
250
250
|
|
251
251
|
# or delete manually via the bulk API:
|
252
252
|
|
253
|
-
CommentIndex.
|
254
|
-
CommentIndex.
|
253
|
+
CommentIndex.bulk do |indexer|
|
254
|
+
CommentIndex.match_all.find_each do |record|
|
255
255
|
indexer.delete record.id
|
256
256
|
end
|
257
257
|
end
|
data/UPDATING.md
CHANGED
@@ -3,6 +3,46 @@
|
|
3
3
|
|
4
4
|
## Update 1.x to 2.x
|
5
5
|
|
6
|
+
* **[BREAKING]** No longer include the mapping in `SearchFlip::Index.mapping`
|
7
|
+
|
8
|
+
1.x:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
class MyIndex
|
12
|
+
include SearchFlip::Index
|
13
|
+
|
14
|
+
# ...
|
15
|
+
|
16
|
+
def self.mapping
|
17
|
+
{
|
18
|
+
type_name: {
|
19
|
+
properties: {
|
20
|
+
# ...
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
2.x:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
class MyIndex
|
32
|
+
include SearchFlip::Index
|
33
|
+
|
34
|
+
# ...
|
35
|
+
|
36
|
+
def self.mapping
|
37
|
+
{
|
38
|
+
properties: {
|
39
|
+
# ...
|
40
|
+
}
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
6
46
|
* **[BREAKING]** Changed `SearchFlip::Index.base_url` to `SearchFlip::Index.connection`
|
7
47
|
|
8
48
|
1.x:
|
data/docker-compose.yml
CHANGED
@@ -171,11 +171,12 @@ module SearchFlip
|
|
171
171
|
#
|
172
172
|
# @param index_name [String] The index name
|
173
173
|
# @param index_settings [Hash] The index settings
|
174
|
+
# @param params [Hash] Optional url params
|
174
175
|
#
|
175
176
|
# @return [Boolean] Returns true or raises SearchFlip::ResponseError
|
176
177
|
|
177
|
-
def create_index(index_name, index_settings = {})
|
178
|
-
http_client.put(index_url(index_name), json: index_settings)
|
178
|
+
def create_index(index_name, index_settings = {}, params = {})
|
179
|
+
http_client.put(index_url(index_name), params: params, json: index_settings)
|
179
180
|
|
180
181
|
true
|
181
182
|
end
|
@@ -250,13 +251,17 @@ module SearchFlip
|
|
250
251
|
# SearchFlip::ResponseError in case any errors occur.
|
251
252
|
#
|
252
253
|
# @param index_name [String] The index name
|
253
|
-
# @param type_name [String] The type name
|
254
254
|
# @param mapping [Hash] The mapping
|
255
|
+
# @param type_name [String] The type name. Starting with Elasticsearch 7,
|
256
|
+
# the type name is optional.
|
255
257
|
#
|
256
258
|
# @return [Boolean] Returns true or raises SearchFlip::ResponseError
|
257
259
|
|
258
|
-
def update_mapping(index_name,
|
259
|
-
|
260
|
+
def update_mapping(index_name, mapping, type_name: nil)
|
261
|
+
url = type_name ? type_url(index_name, type_name) : index_url(index_name)
|
262
|
+
params = type_name && version.to_f >= 6.7 ? { include_type_name: true } : {}
|
263
|
+
|
264
|
+
http_client.put("#{url}/_mapping", params: params, json: mapping)
|
260
265
|
|
261
266
|
true
|
262
267
|
end
|
@@ -265,12 +270,16 @@ module SearchFlip
|
|
265
270
|
# ElasticSearch. Raises SearchFlip::ResponseError in case any errors occur.
|
266
271
|
#
|
267
272
|
# @param index_name [String] The index name
|
268
|
-
# @param type_name [String] The type name
|
273
|
+
# @param type_name [String] The type name. Starting with Elasticsearch 7,
|
274
|
+
# the type name is optional.
|
269
275
|
#
|
270
276
|
# @return [Hash] The current type mapping
|
271
277
|
|
272
|
-
def get_mapping(index_name, type_name)
|
273
|
-
|
278
|
+
def get_mapping(index_name, type_name: nil)
|
279
|
+
url = type_name ? type_url(index_name, type_name) : index_url(index_name)
|
280
|
+
params = type_name && version.to_f >= 6.7 ? { include_type_name: true } : {}
|
281
|
+
|
282
|
+
http_client.headers(accept: "application/json").get("#{url}/_mapping", params: params).parse
|
274
283
|
end
|
275
284
|
|
276
285
|
# Deletes the specified index from ElasticSearch. Raises
|
data/lib/search_flip/index.rb
CHANGED
@@ -262,11 +262,11 @@ module SearchFlip
|
|
262
262
|
# @return [String] The name used for the type within the index
|
263
263
|
|
264
264
|
def type_name
|
265
|
-
|
265
|
+
"_doc"
|
266
266
|
end
|
267
267
|
|
268
268
|
# Returns the base name of the index within ElasticSearch, ie the index
|
269
|
-
# name without prefix.
|
269
|
+
# name without prefix.
|
270
270
|
#
|
271
271
|
# @return [String] The base name of the index, ie without prefix
|
272
272
|
|
@@ -327,15 +327,10 @@ module SearchFlip
|
|
327
327
|
# specified. Raises SearchFlip::ResponseError in case any errors
|
328
328
|
# occur.
|
329
329
|
#
|
330
|
-
# @param include_mapping [Boolean] Whether or not to include the mapping
|
331
|
-
#
|
332
330
|
# @return [Boolean] Returns true or false
|
333
331
|
|
334
|
-
def create_index
|
335
|
-
|
336
|
-
json = json.merge(mappings: mapping) if include_mapping
|
337
|
-
|
338
|
-
connection.create_index(index_name_with_prefix, json)
|
332
|
+
def create_index
|
333
|
+
connection.create_index(index_name_with_prefix, index_settings)
|
339
334
|
end
|
340
335
|
|
341
336
|
# Closes the index within ElasticSearch. Raises SearchFlip::ResponseError
|
@@ -373,24 +368,22 @@ module SearchFlip
|
|
373
368
|
connection.delete_index(index_name_with_prefix)
|
374
369
|
end
|
375
370
|
|
376
|
-
# Specifies a type mapping. Override to specify a custom mapping.
|
371
|
+
# Specifies a type mapping. Override to specify a custom mapping. Please
|
372
|
+
# note that you don't have to include the type name, even for
|
373
|
+
# Elasticsearch versions before 7, as SearchFlip automatically adds the
|
374
|
+
# type name if neccessary.
|
377
375
|
#
|
378
376
|
# @example
|
379
377
|
# def self.mapping
|
380
378
|
# {
|
381
|
-
#
|
382
|
-
#
|
383
|
-
# enabled: false
|
384
|
-
# },
|
385
|
-
# properties: {
|
386
|
-
# email: { type: "string", analyzer: "custom_analyzer" }
|
387
|
-
# }
|
379
|
+
# properties: {
|
380
|
+
# email: { type: "string", analyzer: "custom_analyzer" }
|
388
381
|
# }
|
389
382
|
# }
|
390
383
|
# end
|
391
384
|
|
392
385
|
def mapping
|
393
|
-
{
|
386
|
+
{}
|
394
387
|
end
|
395
388
|
|
396
389
|
# Updates the type mapping within ElasticSearch according to the mapping
|
@@ -398,7 +391,11 @@ module SearchFlip
|
|
398
391
|
# errors occur.
|
399
392
|
|
400
393
|
def update_mapping
|
401
|
-
|
394
|
+
if include_type_name?
|
395
|
+
connection.update_mapping(index_name_with_prefix, { type_name => mapping }, type_name: type_name)
|
396
|
+
else
|
397
|
+
connection.update_mapping(index_name_with_prefix, mapping)
|
398
|
+
end
|
402
399
|
end
|
403
400
|
|
404
401
|
# Retrieves the current type mapping from ElasticSearch. Raises
|
@@ -407,7 +404,21 @@ module SearchFlip
|
|
407
404
|
# @return [Hash] The current type mapping
|
408
405
|
|
409
406
|
def get_mapping
|
410
|
-
|
407
|
+
if include_type_name?
|
408
|
+
connection.get_mapping(index_name_with_prefix, type_name: type_name)
|
409
|
+
else
|
410
|
+
connection.get_mapping(index_name_with_prefix)
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
# Returns whether or not to include a type name. As types are deprecated
|
415
|
+
# in Elasticsearch 7, this method controls whether or not to include the
|
416
|
+
# type name. By default, the method returns true for Elasticsearch
|
417
|
+
# versions before 7 or if the specified type name for the index is not
|
418
|
+
# equal to _doc.
|
419
|
+
|
420
|
+
def include_type_name?
|
421
|
+
type_name != "_doc" || connection.version.to_i < 7
|
411
422
|
end
|
412
423
|
|
413
424
|
# Retrieves the document specified by id from ElasticSearch. Raises
|
data/lib/search_flip/response.rb
CHANGED
data/lib/search_flip/version.rb
CHANGED
@@ -199,6 +199,23 @@ RSpec.describe SearchFlip::Connection do
|
|
199
199
|
end
|
200
200
|
|
201
201
|
describe "#update_mapping" do
|
202
|
+
if SearchFlip::Connection.new.version.to_i >= 7
|
203
|
+
it "updates the mapping of an index without type name" do
|
204
|
+
begin
|
205
|
+
connection = SearchFlip::Connection.new
|
206
|
+
|
207
|
+
mapping = { "properties" => { "id" => { "type" => "long" } } }
|
208
|
+
|
209
|
+
connection.create_index("index_name")
|
210
|
+
connection.update_mapping("index_name", mapping)
|
211
|
+
|
212
|
+
expect(connection.get_mapping("index_name")).to eq("index_name" => { "mappings" => mapping })
|
213
|
+
ensure
|
214
|
+
connection.delete_index("index_name") if connection.index_exists?("index_name")
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
202
219
|
it "updates the mapping of an index" do
|
203
220
|
begin
|
204
221
|
connection = SearchFlip::Connection.new
|
@@ -206,9 +223,9 @@ RSpec.describe SearchFlip::Connection do
|
|
206
223
|
mapping = { "type_name" => { "properties" => { "id" => { "type" => "long" } } } }
|
207
224
|
|
208
225
|
connection.create_index("index_name")
|
209
|
-
connection.update_mapping("index_name", "type_name"
|
226
|
+
connection.update_mapping("index_name", mapping, type_name: "type_name")
|
210
227
|
|
211
|
-
expect(connection.get_mapping("index_name", "type_name")).to eq("index_name" => { "mappings" => mapping })
|
228
|
+
expect(connection.get_mapping("index_name", type_name: "type_name")).to eq("index_name" => { "mappings" => mapping })
|
212
229
|
ensure
|
213
230
|
connection.delete_index("index_name") if connection.index_exists?("index_name")
|
214
231
|
end
|
@@ -33,16 +33,16 @@ RSpec.describe SearchFlip::Index do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
describe ".type_name" do
|
36
|
-
it "
|
36
|
+
it "returns _doc by default" do
|
37
37
|
klass = Class.new do
|
38
38
|
include SearchFlip::Index
|
39
39
|
end
|
40
40
|
|
41
|
-
expect
|
41
|
+
expect(klass.type_name).to eq("_doc")
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
describe ".
|
45
|
+
describe ".index_name" do
|
46
46
|
it "raises a SearchFlip::MethodNotImplemented by default" do
|
47
47
|
klass = Class.new do
|
48
48
|
include SearchFlip::Index
|
@@ -61,24 +61,35 @@ RSpec.describe SearchFlip::Index do
|
|
61
61
|
expect(TestIndex.connection).to have_received(:create_index).with("test", {})
|
62
62
|
end
|
63
63
|
|
64
|
-
it "includes the
|
65
|
-
|
66
|
-
|
67
|
-
allow(TestIndex).to receive(:mapping).and_return(mapping)
|
64
|
+
it "includes the index settings" do
|
65
|
+
allow(TestIndex).to receive(:index_settings).and_return(settings: { number_of_shards: 2 })
|
68
66
|
allow(TestIndex.connection).to receive(:create_index).and_call_original
|
69
67
|
|
70
|
-
TestIndex.create_index
|
68
|
+
TestIndex.create_index
|
71
69
|
|
72
|
-
expect(TestIndex.connection).to have_received(:create_index).with("test",
|
70
|
+
expect(TestIndex.connection).to have_received(:create_index).with("test", { settings: { number_of_shards: 2 } })
|
73
71
|
end
|
72
|
+
end
|
74
73
|
|
75
|
-
|
76
|
-
|
77
|
-
|
74
|
+
describe ".include_type_name?" do
|
75
|
+
it "returns true for Elasticsearch before version 7 and the default type name" do
|
76
|
+
klass = Class.new do
|
77
|
+
include SearchFlip::Index
|
78
|
+
end
|
78
79
|
|
79
|
-
|
80
|
+
expect(klass.include_type_name?).to eq(klass.connection.version.to_i < 7)
|
81
|
+
end
|
80
82
|
|
81
|
-
|
83
|
+
it "returns true if the type name is not equal to _doc" do
|
84
|
+
klass = Class.new do
|
85
|
+
include SearchFlip::Index
|
86
|
+
|
87
|
+
def self.type_name
|
88
|
+
"type_name"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
expect(klass.include_type_name?).to eq(true)
|
82
93
|
end
|
83
94
|
end
|
84
95
|
|
@@ -160,30 +171,85 @@ RSpec.describe SearchFlip::Index do
|
|
160
171
|
end
|
161
172
|
|
162
173
|
describe ".update_mapping" do
|
163
|
-
|
164
|
-
|
174
|
+
if TestIndex.connection.version.to_i >= 7
|
175
|
+
context "without type name" do
|
176
|
+
it "delegates to connection" do
|
177
|
+
TestIndex.create_index
|
178
|
+
|
179
|
+
allow(TestIndex).to receive(:include_type_name?).and_return(false)
|
165
180
|
|
166
|
-
|
181
|
+
mapping = { properties: { id: { type: "long" } } }
|
167
182
|
|
168
|
-
|
169
|
-
|
183
|
+
allow(TestIndex).to receive(:mapping).and_return(mapping)
|
184
|
+
allow(TestIndex.connection).to receive(:update_mapping).and_call_original
|
170
185
|
|
171
|
-
|
186
|
+
TestIndex.update_mapping
|
172
187
|
|
173
|
-
|
188
|
+
expect(TestIndex.connection).to have_received(:update_mapping).with("test", mapping)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context "with type name" do
|
194
|
+
it "delegates to connection" do
|
195
|
+
TestIndex.create_index
|
196
|
+
|
197
|
+
mapping = { properties: { id: { type: "long" } } }
|
198
|
+
|
199
|
+
allow(TestIndex).to receive(:mapping).and_return(mapping)
|
200
|
+
allow(TestIndex.connection).to receive(:update_mapping).and_call_original
|
201
|
+
|
202
|
+
TestIndex.update_mapping
|
203
|
+
|
204
|
+
expect(TestIndex.connection).to have_received(:update_mapping).with("test", { "test" => mapping }, type_name: "test")
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
describe ".mapping" do
|
210
|
+
it "returns an empty mapping" do
|
211
|
+
klass = Class.new do
|
212
|
+
include SearchFlip::Index
|
213
|
+
|
214
|
+
def self.include_type_name?
|
215
|
+
true
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
expect(klass.mapping).to eq({})
|
174
220
|
end
|
175
221
|
end
|
176
222
|
|
177
223
|
describe ".get_mapping" do
|
178
|
-
|
179
|
-
|
180
|
-
|
224
|
+
if TestIndex.connection.version.to_i >= 7
|
225
|
+
context "without type name" do
|
226
|
+
it "delegates to connection" do
|
227
|
+
allow(TestIndex).to receive(:include_type_name?).and_return(false)
|
228
|
+
allow(TestIndex).to receive(:mapping).and_return({})
|
229
|
+
|
230
|
+
TestIndex.create_index
|
231
|
+
TestIndex.update_mapping
|
232
|
+
|
233
|
+
allow(TestIndex.connection).to receive(:get_mapping).and_call_original
|
234
|
+
|
235
|
+
TestIndex.get_mapping
|
181
236
|
|
182
|
-
|
237
|
+
expect(TestIndex.connection).to have_received(:get_mapping).with("test")
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
183
241
|
|
184
|
-
|
242
|
+
context "with type name" do
|
243
|
+
it "delegates to connection" do
|
244
|
+
TestIndex.create_index
|
245
|
+
TestIndex.update_mapping
|
185
246
|
|
186
|
-
|
247
|
+
allow(TestIndex.connection).to receive(:get_mapping).and_call_original
|
248
|
+
|
249
|
+
TestIndex.get_mapping
|
250
|
+
|
251
|
+
expect(TestIndex.connection).to have_received(:get_mapping).with("test", type_name: "test")
|
252
|
+
end
|
187
253
|
end
|
188
254
|
end
|
189
255
|
|
data/spec/spec_helper.rb
CHANGED
@@ -114,25 +114,23 @@ class ProductIndex
|
|
114
114
|
def self.mapping
|
115
115
|
if ProductIndex.connection.version.to_i >= 5
|
116
116
|
{
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
fielddata: true
|
130
|
-
}
|
117
|
+
properties: {
|
118
|
+
category: {
|
119
|
+
type: "text",
|
120
|
+
fielddata: true
|
121
|
+
},
|
122
|
+
title: {
|
123
|
+
type: "text",
|
124
|
+
fielddata: true
|
125
|
+
},
|
126
|
+
description: {
|
127
|
+
type: "text",
|
128
|
+
fielddata: true
|
131
129
|
}
|
132
130
|
}
|
133
131
|
}
|
134
132
|
else
|
135
|
-
{
|
133
|
+
{ }
|
136
134
|
end
|
137
135
|
end
|
138
136
|
|
@@ -171,10 +169,8 @@ class TestIndex
|
|
171
169
|
|
172
170
|
def self.mapping
|
173
171
|
{
|
174
|
-
|
175
|
-
|
176
|
-
test_field: { type: "date" }
|
177
|
-
}
|
172
|
+
properties: {
|
173
|
+
test_field: { type: "date" }
|
178
174
|
}
|
179
175
|
}
|
180
176
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: search_flip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.beta8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Vetter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|