elasticsearch-persistence 7.2.1 → 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/README.md +25 -53
- data/Rakefile +8 -7
- data/elasticsearch-persistence.gemspec +32 -35
- data/examples/notes/application.rb +0 -1
- data/examples/notes/test.rb +1 -1
- data/lib/elasticsearch/persistence/repository/dsl.rb +0 -14
- data/lib/elasticsearch/persistence/repository/find.rb +1 -4
- data/lib/elasticsearch/persistence/repository/search.rb +2 -4
- data/lib/elasticsearch/persistence/repository/store.rb +6 -9
- data/lib/elasticsearch/persistence/repository.rb +1 -17
- data/lib/elasticsearch/persistence/version.rb +1 -1
- data/spec/repository/find_spec.rb +14 -91
- data/spec/repository/response/results_spec.rb +18 -17
- data/spec/repository/search_spec.rb +27 -153
- data/spec/repository/store_spec.rb +8 -48
- data/spec/repository_spec.rb +50 -145
- data/spec/spec_helper.rb +3 -2
- metadata +55 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88bcaa32622770f7fe47c65cbc707b06719d51dd3f6c81e1690666e8ed224034
|
4
|
+
data.tar.gz: 60dc779f07f2fec1d368266fdba2a8f31de473e3dd53405fc0394159756fd524
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 206ee66e4041b522a8ebc15d0b102068dfabcc7ad927654e45680bc9ff964f66affd581e050f73d3fc14cb2996c7cbfd2915c9c6d3acebceea73babc7f9e1e68
|
7
|
+
data.tar.gz: 4525c21fafaaae024b0e7343bbdd0c24ee0a90e251e21c1d54ecc5a83d5f07f69075fba4d537c49655bb210d189ffa7950463c8605848d5bde485e69d3882821
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -4,17 +4,19 @@ Persistence layer for Ruby domain objects in Elasticsearch, using the Repository
|
|
4
4
|
|
5
5
|
## Compatibility
|
6
6
|
|
7
|
-
This library is compatible with Ruby
|
7
|
+
This library is compatible with Ruby 3.1 and higher.
|
8
8
|
|
9
|
-
The
|
9
|
+
The version numbers follow the Elasticsearch major versions. Currently the `main` branch is compatible with version `8.x` of the Elasticsearch stack.
|
10
10
|
|
11
|
-
| Rubygem
|
12
|
-
|
13
|
-
| 0.1
|
14
|
-
| 2.x
|
15
|
-
| 5.x
|
16
|
-
| 6.x
|
17
|
-
|
|
11
|
+
| Rubygem | | Elasticsearch |
|
12
|
+
|:-------:|:-:|:-------------:|
|
13
|
+
| 0.1 | → | 1.x |
|
14
|
+
| 2.x | → | 2.x |
|
15
|
+
| 5.x | → | 5.x |
|
16
|
+
| 6.x | → | 6.x |
|
17
|
+
| 7.x | → | 7.x |
|
18
|
+
| 8.x | → | 8.x |
|
19
|
+
| main | → | 8.x |
|
18
20
|
|
19
21
|
## Installation
|
20
22
|
|
@@ -77,7 +79,7 @@ note = Note.new id: 1, text: 'Test'
|
|
77
79
|
repository.save(note)
|
78
80
|
# PUT http://localhost:9200/repository/_doc/1 [status:201, request:0.210s, query:n/a]
|
79
81
|
# > {"id":1,"text":"Test"}
|
80
|
-
# < {"_index":"repository","
|
82
|
+
# < {"_index":"repository","_id":"1","_version":1,"created":true}
|
81
83
|
```
|
82
84
|
|
83
85
|
...find it...
|
@@ -85,7 +87,7 @@ repository.save(note)
|
|
85
87
|
```ruby
|
86
88
|
n = repository.find(1)
|
87
89
|
# GET http://localhost:9200/repository/_doc/1 [status:200, request:0.003s, query:n/a]
|
88
|
-
# < {"_index":"repository","
|
90
|
+
# < {"_index":"repository","_id":"1","_version":2,"found":true, "_source" : {"id":1,"text":"Test"}}
|
89
91
|
=> <Note:0x007fcbfc0c4980 @attributes={"id"=>1, "text"=>"Test"}>
|
90
92
|
```
|
91
93
|
|
@@ -104,14 +106,14 @@ repository.search(query: { match: { text: 'test' } }).first
|
|
104
106
|
```ruby
|
105
107
|
repository.delete(note)
|
106
108
|
# DELETE http://localhost:9200/repository/_doc/1 [status:200, request:0.014s, query:n/a]
|
107
|
-
# < {"found":true,"_index":"repository","
|
108
|
-
=> {"found"=>true, "_index"=>"repository", "
|
109
|
+
# < {"found":true,"_index":"repository","_id":"1","_version":3}
|
110
|
+
=> {"found"=>true, "_index"=>"repository", "_id"=>"1", "_version"=>2}
|
109
111
|
```
|
110
112
|
|
111
113
|
The repository module provides a number of features and facilities to configure and customize the behavior:
|
112
114
|
|
113
115
|
* Configuring the Elasticsearch [client](https://github.com/elastic/elasticsearch-ruby#usage) being used
|
114
|
-
* Setting the index name,
|
116
|
+
* Setting the index name, and object class for deserialization
|
115
117
|
* Composing mappings and settings for the index
|
116
118
|
* Creating, deleting or refreshing the index
|
117
119
|
* Finding or searching for documents
|
@@ -144,7 +146,7 @@ class MyRepository
|
|
144
146
|
end
|
145
147
|
|
146
148
|
client = Elasticsearch::Client.new(url: ENV['ELASTICSEARCH_URL'], log: true)
|
147
|
-
repository = MyRepository.new(client: client, index_name: :my_notes,
|
149
|
+
repository = MyRepository.new(client: client, index_name: :my_notes, klass: Note)
|
148
150
|
repository.settings number_of_shards: 1 do
|
149
151
|
mapping do
|
150
152
|
indexes :text, analyzer: 'snowball'
|
@@ -152,8 +154,7 @@ repository.settings number_of_shards: 1 do
|
|
152
154
|
end
|
153
155
|
```
|
154
156
|
|
155
|
-
The custom Elasticsearch client will be used now, with a custom index and
|
156
|
-
as well as the custom serialization and de-serialization logic.
|
157
|
+
The custom Elasticsearch client will be used now, with a custom index, as well as the custom serialization and de-serialization logic.
|
157
158
|
|
158
159
|
We can create the index with the desired settings and mappings:
|
159
160
|
|
@@ -169,7 +170,7 @@ Save the document with extra properties added by the `serialize` method:
|
|
169
170
|
repository.save(note)
|
170
171
|
# PUT http://localhost:9200/my_notes/note/1
|
171
172
|
# > {"id":1,"text":"Test","my_special_key":"my_special_stuff"}
|
172
|
-
{"_index"=>"my_notes", "
|
173
|
+
{"_index"=>"my_notes", "_id"=>"1", "_version"=>4, ... }
|
173
174
|
```
|
174
175
|
|
175
176
|
And `deserialize` it:
|
@@ -193,7 +194,6 @@ class NoteRepository
|
|
193
194
|
include Elasticsearch::Persistence::Repository::DSL
|
194
195
|
|
195
196
|
index_name 'notes'
|
196
|
-
document_type 'note'
|
197
197
|
klass Note
|
198
198
|
|
199
199
|
settings number_of_shards: 1 do
|
@@ -236,7 +236,7 @@ You can also override the default configuration with options passed to the initi
|
|
236
236
|
|
237
237
|
```ruby
|
238
238
|
client = Elasticsearch::Client.new(url: 'http://localhost:9250', log: true)
|
239
|
-
client.transport.
|
239
|
+
client.transport.logger.formatter = proc { |s, d, p, m| "\e[2m# #{m}\n\e[0m" }
|
240
240
|
repository = NoteRepository.new(client: client, index_name: 'notes_development')
|
241
241
|
|
242
242
|
repository.create_index!(force: true)
|
@@ -267,7 +267,7 @@ The repository uses the standard Elasticsearch [client](https://github.com/elast
|
|
267
267
|
```ruby
|
268
268
|
client = Elasticsearch::Client.new(url: 'http://search.server.org')
|
269
269
|
repository = NoteRepository.new(client: client)
|
270
|
-
repository.client.transport.
|
270
|
+
repository.client.transport.logger = Logger.new(STDERR)
|
271
271
|
repository.client
|
272
272
|
# => Elasticsearch::Client
|
273
273
|
|
@@ -317,36 +317,8 @@ repository.index_name
|
|
317
317
|
|
318
318
|
```
|
319
319
|
|
320
|
-
The `document_type` method specifies the Elasticsearch document type to use for storage, lookup and search. The default value is
|
321
|
-
'_doc'. Keep in mind that future versions of Elasticsearch will not allow you to set this yourself and will use the type,
|
322
|
-
'_doc'.
|
323
|
-
|
324
|
-
```ruby
|
325
|
-
repository = NoteRepository.new(document_type: 'note')
|
326
|
-
repository.document_type
|
327
|
-
# => 'note'
|
328
|
-
|
329
|
-
```
|
330
|
-
|
331
|
-
or with the DSL mixin:
|
332
|
-
|
333
|
-
```ruby
|
334
|
-
class NoteRepository
|
335
|
-
include Elasticsearch::Persistence::Repository
|
336
|
-
include Elasticsearch::Persistence::Repository::DSL
|
337
|
-
|
338
|
-
document_type 'note'
|
339
|
-
end
|
340
|
-
|
341
|
-
repository = NoteRepository.new
|
342
|
-
repository.document_type
|
343
|
-
# => 'note'
|
344
|
-
|
345
|
-
```
|
346
|
-
|
347
320
|
The `klass` method specifies the Ruby class name to use when initializing objects from
|
348
|
-
documents retrieved from the repository. If this value is not set, a Hash representation of the document will be
|
349
|
-
returned instead.
|
321
|
+
documents retrieved from the repository. If this value is not set, a Hash representation of the document will be returned instead.
|
350
322
|
|
351
323
|
```ruby
|
352
324
|
repository = NoteRepository.new(klass: Note)
|
@@ -451,7 +423,7 @@ The `save` method allows you to store a domain object in the repository:
|
|
451
423
|
```ruby
|
452
424
|
note = Note.new id: 1, title: 'Quick Brown Fox'
|
453
425
|
repository.save(note)
|
454
|
-
# => {"_index"=>"notes_development", "
|
426
|
+
# => {"_index"=>"notes_development", "_id"=>"1", "_version"=>1, "created"=>true}
|
455
427
|
```
|
456
428
|
|
457
429
|
The `update` method allows you to perform a partial update of a document in the repository.
|
@@ -459,14 +431,14 @@ Use either a partial document:
|
|
459
431
|
|
460
432
|
```ruby
|
461
433
|
repository.update id: 1, title: 'UPDATED', tags: []
|
462
|
-
# => {"_index"=>"notes_development", "
|
434
|
+
# => {"_index"=>"notes_development", "_id"=>"1", "_version"=>2}
|
463
435
|
```
|
464
436
|
|
465
437
|
Or a script (optionally with parameters):
|
466
438
|
|
467
439
|
```ruby
|
468
440
|
repository.update 1, script: 'if (!ctx._source.tags.contains(t)) { ctx._source.tags += t }', params: { t: 'foo' }
|
469
|
-
# => {"_index"=>"notes_development", "
|
441
|
+
# => {"_index"=>"notes_development", "_id"=>"1", "_version"=>3}
|
470
442
|
```
|
471
443
|
|
472
444
|
|
data/Rakefile
CHANGED
@@ -15,11 +15,11 @@
|
|
15
15
|
# specific language governing permissions and limitations
|
16
16
|
# under the License.
|
17
17
|
|
18
|
-
require
|
18
|
+
require 'bundler/gem_tasks'
|
19
19
|
|
20
|
-
desc
|
21
|
-
task :
|
22
|
-
task :
|
20
|
+
desc 'Run unit tests'
|
21
|
+
task default: 'test:unit'
|
22
|
+
task test: 'test:unit'
|
23
23
|
|
24
24
|
# ----- Test tasks ------------------------------------------------------------
|
25
25
|
|
@@ -27,14 +27,15 @@ require 'rake/testtask'
|
|
27
27
|
require 'rspec/core/rake_task'
|
28
28
|
|
29
29
|
namespace :test do
|
30
|
-
|
31
30
|
RSpec::Core::RakeTask.new(:spec)
|
32
31
|
|
33
32
|
Rake::TestTask.new(:all) do |test|
|
34
33
|
test.verbose = false
|
35
34
|
test.warning = false
|
36
|
-
test.deps = [
|
35
|
+
test.deps = [:spec]
|
37
36
|
end
|
37
|
+
|
38
|
+
task unit: :spec
|
38
39
|
end
|
39
40
|
|
40
41
|
namespace :bundle do
|
@@ -65,6 +66,6 @@ if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
|
|
65
66
|
cane.style_measure = 120
|
66
67
|
end
|
67
68
|
rescue LoadError
|
68
|
-
warn
|
69
|
+
warn 'cane not available, quality task not provided.'
|
69
70
|
end
|
70
71
|
end
|
@@ -16,52 +16,49 @@
|
|
16
16
|
# under the License.
|
17
17
|
|
18
18
|
# coding: utf-8
|
19
|
-
|
19
|
+
|
20
|
+
lib = File.expand_path('lib', __dir__)
|
20
21
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
21
22
|
require 'elasticsearch/persistence/version'
|
22
23
|
|
23
24
|
Gem::Specification.new do |s|
|
24
|
-
s.name =
|
25
|
+
s.name = 'elasticsearch-persistence'
|
25
26
|
s.version = Elasticsearch::Persistence::VERSION
|
26
|
-
s.authors = [
|
27
|
-
s.email = [
|
28
|
-
s.description =
|
29
|
-
s.summary =
|
30
|
-
s.homepage =
|
31
|
-
s.license =
|
27
|
+
s.authors = ['Elastic Client Library Maintainers']
|
28
|
+
s.email = ['client-libs@elastic.co']
|
29
|
+
s.description = 'Persistence layer for Ruby models and Elasticsearch.'
|
30
|
+
s.summary = 'Persistence layer for Ruby models and Elasticsearch.'
|
31
|
+
s.homepage = 'https://github.com/elasticsearch/elasticsearch-rails/'
|
32
|
+
s.license = 'Apache 2'
|
32
33
|
|
33
34
|
s.files = `git ls-files -z`.split("\x0")
|
34
35
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
35
36
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
36
|
-
s.require_paths = [
|
37
|
-
|
38
|
-
s.extra_rdoc_files = [ "README.md", "LICENSE.txt" ]
|
39
|
-
s.rdoc_options = [ "--charset=UTF-8" ]
|
40
|
-
|
41
|
-
s.required_ruby_version = ">= 1.9.3"
|
42
|
-
|
43
|
-
s.add_dependency "elasticsearch", '~> 7'
|
44
|
-
s.add_dependency "elasticsearch-model", '7.2.1'
|
45
|
-
s.add_dependency "activesupport", '> 4'
|
46
|
-
s.add_dependency "activemodel", '> 4'
|
47
|
-
s.add_dependency "hashie"
|
48
|
-
|
49
|
-
s.add_development_dependency "bundler"
|
50
|
-
s.add_development_dependency "rake", "~> 12"
|
37
|
+
s.require_paths = ['lib']
|
51
38
|
|
52
|
-
s.
|
39
|
+
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
40
|
+
s.rdoc_options = ['--charset=UTF-8']
|
53
41
|
|
54
|
-
s.
|
42
|
+
s.required_ruby_version = '>= 3'
|
55
43
|
|
56
|
-
s.
|
57
|
-
s.
|
58
|
-
s.
|
59
|
-
s.
|
60
|
-
s.
|
61
|
-
s.add_development_dependency "yard"
|
62
|
-
s.add_development_dependency "ruby-prof" unless defined?(JRUBY_VERSION)
|
63
|
-
s.add_development_dependency "pry"
|
44
|
+
s.add_dependency 'activemodel', '> 4'
|
45
|
+
s.add_dependency 'activesupport', '> 4'
|
46
|
+
s.add_dependency 'elasticsearch', '~> 8'
|
47
|
+
s.add_dependency 'elasticsearch-model', '8'
|
48
|
+
s.add_dependency 'hashie'
|
64
49
|
|
65
|
-
s.add_development_dependency
|
66
|
-
s.add_development_dependency
|
50
|
+
s.add_development_dependency 'bundler'
|
51
|
+
s.add_development_dependency 'cane'
|
52
|
+
s.add_development_dependency 'minitest'
|
53
|
+
s.add_development_dependency 'mocha'
|
54
|
+
s.add_development_dependency 'oj' unless defined?(JRUBY_VERSION)
|
55
|
+
s.add_development_dependency 'pry'
|
56
|
+
s.add_development_dependency 'rails', '> 4'
|
57
|
+
s.add_development_dependency 'rake', '~> 12'
|
58
|
+
s.add_development_dependency 'ruby-prof' unless defined?(JRUBY_VERSION)
|
59
|
+
s.add_development_dependency 'shoulda-context'
|
60
|
+
s.add_development_dependency 'simplecov'
|
61
|
+
s.add_development_dependency 'test-unit'
|
62
|
+
s.add_development_dependency 'turn'
|
63
|
+
s.add_development_dependency 'yard'
|
67
64
|
end
|
data/examples/notes/test.rb
CHANGED
@@ -90,7 +90,7 @@ class Elasticsearch::Persistence::ExampleApplicationTest < Test::Unit::TestCase
|
|
90
90
|
app.settings.repository.client = Elasticsearch::Client.new \
|
91
91
|
hosts: [{ host: 'localhost', port: ENV.fetch('TEST_CLUSTER_PORT', 9250)}],
|
92
92
|
log: true
|
93
|
-
app.settings.repository.client.transport.
|
93
|
+
app.settings.repository.client.transport.logger.formatter = proc { |s, d, p, m| "\e[2m#{m}\n\e[0m" }
|
94
94
|
app.settings.repository.create_index! force: true
|
95
95
|
app.settings.repository.client.cluster.health wait_for_status: 'yellow'
|
96
96
|
end
|
@@ -23,7 +23,6 @@ module Elasticsearch
|
|
23
23
|
#
|
24
24
|
# @since 6.0.0
|
25
25
|
module DSL
|
26
|
-
|
27
26
|
def self.included(base)
|
28
27
|
base.send(:extend, Elasticsearch::Model::Indexing::ClassMethods)
|
29
28
|
base.send(:extend, ClassMethods)
|
@@ -34,19 +33,6 @@ module Elasticsearch
|
|
34
33
|
#
|
35
34
|
# @since 6.0.0
|
36
35
|
module ClassMethods
|
37
|
-
|
38
|
-
# Get or set the class-level document type setting.
|
39
|
-
#
|
40
|
-
# @example
|
41
|
-
# MyRepository.document_type
|
42
|
-
#
|
43
|
-
# @return [ String, Symbol ] _type The repository's document type.
|
44
|
-
#
|
45
|
-
# @since 6.0.0
|
46
|
-
def document_type(_type = nil)
|
47
|
-
@document_type ||= _type
|
48
|
-
end
|
49
|
-
|
50
36
|
# Get or set the class-level index name setting.
|
51
37
|
#
|
52
38
|
# @example
|
@@ -64,7 +64,6 @@ module Elasticsearch
|
|
64
64
|
#
|
65
65
|
def exists?(id, options={})
|
66
66
|
request = { index: index_name, id: id }
|
67
|
-
request[:type] = document_type if document_type
|
68
67
|
client.exists(request.merge(options))
|
69
68
|
end
|
70
69
|
|
@@ -84,10 +83,9 @@ module Elasticsearch
|
|
84
83
|
#
|
85
84
|
def __find_one(id, options={})
|
86
85
|
request = { index: index_name, id: id }
|
87
|
-
request[:type] = document_type if document_type
|
88
86
|
document = client.get(request.merge(options))
|
89
87
|
deserialize(document)
|
90
|
-
rescue
|
88
|
+
rescue Elastic::Transport::Transport::Errors::NotFound => e
|
91
89
|
raise DocumentNotFound, e.message, caller
|
92
90
|
end
|
93
91
|
|
@@ -95,7 +93,6 @@ module Elasticsearch
|
|
95
93
|
#
|
96
94
|
def __find_many(ids, options={})
|
97
95
|
request = { index: index_name, body: { ids: ids } }
|
98
|
-
request[:type] = document_type if document_type
|
99
96
|
documents = client.mget(request.merge(options))
|
100
97
|
documents[DOCS].map do |document|
|
101
98
|
deserialize(document) if document[FOUND]
|
@@ -60,8 +60,7 @@ module Elasticsearch
|
|
60
60
|
# @return [Elasticsearch::Persistence::Repository::Response::Results]
|
61
61
|
#
|
62
62
|
def search(query_or_definition, options={})
|
63
|
-
request = { index: index_name
|
64
|
-
type: document_type }
|
63
|
+
request = { index: index_name }
|
65
64
|
if query_or_definition.respond_to?(:to_hash)
|
66
65
|
request[:body] = query_or_definition.to_hash
|
67
66
|
elsif query_or_definition.is_a?(String)
|
@@ -98,8 +97,7 @@ module Elasticsearch
|
|
98
97
|
#
|
99
98
|
def count(query_or_definition=nil, options={})
|
100
99
|
query_or_definition ||= { query: { match_all: {} } }
|
101
|
-
request = { index: index_name
|
102
|
-
type: document_type }
|
100
|
+
request = { index: index_name }
|
103
101
|
|
104
102
|
if query_or_definition.respond_to?(:to_hash)
|
105
103
|
request[:body] = query_or_definition.to_hash
|
@@ -27,7 +27,7 @@ module Elasticsearch
|
|
27
27
|
#
|
28
28
|
# @example
|
29
29
|
# repository.save(myobject)
|
30
|
-
# => {"_index"=>"...", "
|
30
|
+
# => {"_index"=>"...", "_id"=>"...", "_version"=>1, "created"=>true}
|
31
31
|
#
|
32
32
|
# @param [ Object ] document The document to save into Elasticsearch.
|
33
33
|
# @param [ Hash ] options The save request options.
|
@@ -40,7 +40,6 @@ module Elasticsearch
|
|
40
40
|
request = { index: index_name,
|
41
41
|
id: id,
|
42
42
|
body: serialized }
|
43
|
-
request[:type] = document_type if document_type
|
44
43
|
client.index(request.merge(options))
|
45
44
|
end
|
46
45
|
|
@@ -49,12 +48,12 @@ module Elasticsearch
|
|
49
48
|
# @example Update the document with partial data
|
50
49
|
#
|
51
50
|
# repository.update id: 1, title: 'UPDATED', tags: []
|
52
|
-
# # => {"_index"=>"...", "
|
51
|
+
# # => {"_index"=>"...", "_id"=>"1", "_version"=>2}
|
53
52
|
#
|
54
53
|
# @example Update the document with a script
|
55
54
|
#
|
56
55
|
# repository.update 1, script: 'ctx._source.views += 1'
|
57
|
-
# # => {"_index"=>"...", "
|
56
|
+
# # => {"_index"=>"...", "_id"=>"1", "_version"=>3}
|
58
57
|
#
|
59
58
|
# @param [ Object ] document_or_id The document to update or the id of the document to update.
|
60
59
|
# @param [ Hash ] options The update request options.
|
@@ -65,7 +64,6 @@ module Elasticsearch
|
|
65
64
|
if document_or_id.is_a?(String) || document_or_id.is_a?(Integer)
|
66
65
|
id = document_or_id
|
67
66
|
body = options
|
68
|
-
type = document_type
|
69
67
|
else
|
70
68
|
document = serialize(document_or_id)
|
71
69
|
id = __extract_id_from_document(document)
|
@@ -74,9 +72,8 @@ module Elasticsearch
|
|
74
72
|
else
|
75
73
|
body = { doc: document }.merge(options)
|
76
74
|
end
|
77
|
-
type = document.delete(:type) || document_type
|
78
75
|
end
|
79
|
-
client.update(index: index_name, id: id,
|
76
|
+
client.update(index: index_name, id: id, body: body)
|
80
77
|
end
|
81
78
|
|
82
79
|
# Remove the serialized object or document with specified ID from Elasticsearch
|
@@ -84,7 +81,7 @@ module Elasticsearch
|
|
84
81
|
# @example Remove the document with ID 1
|
85
82
|
#
|
86
83
|
# repository.delete(1)
|
87
|
-
# # => {"_index"=>"...", "
|
84
|
+
# # => {"_index"=>"...", "_id"=>"1", "_version"=>4}
|
88
85
|
#
|
89
86
|
# @param [ Object ] document_or_id The document to delete or the id of the document to delete.
|
90
87
|
# @param [ Hash ] options The delete request options.
|
@@ -98,7 +95,7 @@ module Elasticsearch
|
|
98
95
|
serialized = serialize(document_or_id)
|
99
96
|
id = __get_id_from_document(serialized)
|
100
97
|
end
|
101
|
-
client.delete({ index: index_name,
|
98
|
+
client.delete({ index: index_name, id: id }.merge(options))
|
102
99
|
end
|
103
100
|
end
|
104
101
|
end
|
@@ -58,7 +58,6 @@ module Elasticsearch
|
|
58
58
|
# @param [ Proc ] block A block to evaluate on the new repository instance.
|
59
59
|
#
|
60
60
|
# @option options [ Symbol, String ] :index_name The name of the index.
|
61
|
-
# @option options [ Symbol, String ] :document_type The type of documents persisted in this repository.
|
62
61
|
# @option options [ Symbol, String ] :client The client used to handle requests to and from Elasticsearch.
|
63
62
|
# @option options [ Symbol, String ] :klass The class used to instantiate an object when documents are
|
64
63
|
# deserialized. The default is nil, in which case the raw document will be returned as a Hash.
|
@@ -95,7 +94,6 @@ module Elasticsearch
|
|
95
94
|
# @param [ Hash ] options The options to use.
|
96
95
|
#
|
97
96
|
# @option options [ Symbol, String ] :index_name The name of the index.
|
98
|
-
# @option options [ Symbol, String ] :document_type The type of documents persisted in this repository.
|
99
97
|
# @option options [ Symbol, String ] :client The client used to handle requests to and from Elasticsearch.
|
100
98
|
# @option options [ Symbol, String ] :klass The class used to instantiate an object when documents are
|
101
99
|
# deserialized. The default is nil, in which case the raw document will be returned as a Hash.
|
@@ -121,19 +119,6 @@ module Elasticsearch
|
|
121
119
|
Elasticsearch::Client.new
|
122
120
|
end
|
123
121
|
|
124
|
-
# Get the document type used by the repository object.
|
125
|
-
#
|
126
|
-
# @example
|
127
|
-
# repository.document_type
|
128
|
-
#
|
129
|
-
# @return [ String, Symbol ] The repository's document type.
|
130
|
-
#
|
131
|
-
# @since 6.0.0
|
132
|
-
def document_type
|
133
|
-
@document_type ||= @options[:document_type] ||
|
134
|
-
__get_class_value(:document_type)
|
135
|
-
end
|
136
|
-
|
137
122
|
# Get the index name used by the repository.
|
138
123
|
#
|
139
124
|
# @example
|
@@ -180,7 +165,6 @@ module Elasticsearch
|
|
180
165
|
def mapping(*args)
|
181
166
|
@memoized_mapping ||= @options[:mapping] || (begin
|
182
167
|
if _mapping = __get_class_value(:mapping)
|
183
|
-
_mapping.instance_variable_set(:@type, document_type)
|
184
168
|
_mapping
|
185
169
|
end
|
186
170
|
end) || (super && @mapping)
|
@@ -229,7 +213,7 @@ module Elasticsearch
|
|
229
213
|
#
|
230
214
|
# @since 6.0.0
|
231
215
|
def inspect
|
232
|
-
"#<#{self.class}:0x#{object_id} index_name=#{index_name}
|
216
|
+
"#<#{self.class}:0x#{object_id} index_name=#{index_name} klass=#{klass}>"
|
233
217
|
end
|
234
218
|
|
235
219
|
private
|