elasticsearch-api 1.0.15 → 1.0.16.pre
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/Gemfile +3 -3
- data/README.md +14 -2
- data/Rakefile +1 -1
- data/elasticsearch-api.gemspec +1 -1
- data/lib/elasticsearch/api.rb +11 -8
- data/lib/elasticsearch/api/actions/bulk.rb +3 -2
- data/lib/elasticsearch/api/actions/cat/repositories.rb +40 -0
- data/lib/elasticsearch/api/actions/cat/snapshots.rb +45 -0
- data/lib/elasticsearch/api/actions/indices/forcemerge.rb +62 -0
- data/lib/elasticsearch/api/actions/indices/optimize.rb +2 -0
- data/lib/elasticsearch/api/actions/mpercolate.rb +3 -2
- data/lib/elasticsearch/api/actions/msearch.rb +2 -2
- data/lib/elasticsearch/api/actions/search.rb +2 -2
- data/lib/elasticsearch/api/utils.rb +20 -14
- data/lib/elasticsearch/api/version.rb +1 -1
- data/test/integration/yaml_test_runner.rb +7 -0
- data/test/unit/api_test.rb +4 -0
- data/test/unit/bulk_test.rb +31 -2
- data/test/unit/cat/repositories_test.rb +26 -0
- data/test/unit/cat/snapshots_test.rb +26 -0
- data/test/unit/indices/forcemerge_test.rb +26 -0
- data/test/unit/search_test.rb +8 -0
- data/test/unit/utils_test.rb +19 -2
- metadata +17 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 081fe135d7cd87037475fd790752c46d26b170ed
|
4
|
+
data.tar.gz: 3d8753842bdfff64dffcccd95e431988b0cf943a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90ae2bede4146274cf1bcbae9477999e7144982d595ec67e64bf1839337ebfa93083ed9afac814cf2f0746de40eab462a973a0bebb7d55e4919d78795eeed9bb
|
7
|
+
data.tar.gz: 22646e3f5530a92e0e25d380bfcef7ccd6db6e8b06dd1048a83fb1eaf3912a0581de5607701511f156422003dad597fc28ede8b90c6324440201bac9fc675be8
|
data/Gemfile
CHANGED
@@ -3,14 +3,14 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in elasticsearch-api.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
if File.
|
6
|
+
if File.exist? File.expand_path("../../elasticsearch/elasticsearch.gemspec", __FILE__)
|
7
7
|
gem 'elasticsearch', :path => File.expand_path("../../elasticsearch", __FILE__), :require => false
|
8
8
|
end
|
9
9
|
|
10
|
-
if File.
|
10
|
+
if File.exist? File.expand_path("../../elasticsearch-transport", __FILE__)
|
11
11
|
gem 'elasticsearch-transport', :path => File.expand_path("../../elasticsearch-transport", __FILE__), :require => true
|
12
12
|
end
|
13
13
|
|
14
|
-
if File.
|
14
|
+
if File.exist? File.expand_path("../../elasticsearch-extensions", __FILE__)
|
15
15
|
gem 'elasticsearch-extensions', :path => File.expand_path("../../elasticsearch-extensions", __FILE__), :require => false
|
16
16
|
end
|
data/README.md
CHANGED
@@ -14,9 +14,9 @@ library.
|
|
14
14
|
|
15
15
|
The library is compatible with Ruby 1.8.7 or higher.
|
16
16
|
|
17
|
-
The library is compatible with Elasticsearch 0.90 and
|
17
|
+
The library is compatible with Elasticsearch 0.90, 1.x and 2.x -- you have to install and use a matching version, though.
|
18
18
|
|
19
|
-
The 1.x versions and the master branch are compatible with
|
19
|
+
The 1.x versions and the master branch are compatible with Elasticsearch 1.x and 2.x APIs.
|
20
20
|
|
21
21
|
To use the **Elasticsearch 0.90** API, install the **0.4.x** gem version or use the corresponding
|
22
22
|
[`0.4`](https://github.com/elasticsearch/elasticsearch-ruby/tree/0.4) branch.
|
@@ -155,6 +155,18 @@ mash.aggregations.tags.terms.first
|
|
155
155
|
# => #<Hashie::Mash count=3 term="z">
|
156
156
|
```
|
157
157
|
|
158
|
+
### Using a Custom JSON Serializer
|
159
|
+
|
160
|
+
The library uses the [MultiJson](https://rubygems.org/gems/multi_json/) gem by default,
|
161
|
+
but allows you to set a custom JSON library, provided it uses the standard `load/dump`
|
162
|
+
interface:
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
Elasticsearch::API.settings[:serializer] = JrJackson::Json
|
166
|
+
Elasticsearch::API.serializer.dump({foo: 'bar'})
|
167
|
+
# => {"foo":"bar"}
|
168
|
+
```
|
169
|
+
|
158
170
|
## Development
|
159
171
|
|
160
172
|
To work on the code, clone and bootstrap the main repository first --
|
data/Rakefile
CHANGED
@@ -71,7 +71,7 @@ namespace :test do
|
|
71
71
|
es_version_info = client.info['version']
|
72
72
|
build_hash = es_version_info['build_hash']
|
73
73
|
cluster_running = true
|
74
|
-
rescue Faraday::Error::ConnectionFailed
|
74
|
+
rescue Faraday::Error::ConnectionFailed
|
75
75
|
STDERR.puts "[!] Test cluster not running?"
|
76
76
|
cluster_running = false
|
77
77
|
end
|
data/elasticsearch-api.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency "multi_json"
|
24
24
|
|
25
25
|
s.add_development_dependency "bundler", "> 1"
|
26
|
-
s.add_development_dependency "rake"
|
26
|
+
s.add_development_dependency "rake", "< 11.0"
|
27
27
|
|
28
28
|
s.add_development_dependency "elasticsearch"
|
29
29
|
s.add_development_dependency "elasticsearch-transport"
|
data/lib/elasticsearch/api.rb
CHANGED
@@ -10,6 +10,8 @@ Dir[ File.expand_path('../api/namespace/**/*.rb', __FILE__) ].each { |f| require
|
|
10
10
|
|
11
11
|
module Elasticsearch
|
12
12
|
module API
|
13
|
+
DEFAULT_SERIALIZER = MultiJson
|
14
|
+
|
13
15
|
COMMON_PARAMS = [
|
14
16
|
:ignore, # Client specific parameters
|
15
17
|
:index, :type, :id, # :index/:type/:id
|
@@ -47,15 +49,16 @@ module Elasticsearch
|
|
47
49
|
Elasticsearch::API::Cat
|
48
50
|
end
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
def settings
|
55
|
-
@settings ||= {}
|
56
|
-
end
|
52
|
+
# The serializer class
|
53
|
+
#
|
54
|
+
def self.serializer
|
55
|
+
settings[:serializer] || DEFAULT_SERIALIZER
|
57
56
|
end
|
58
57
|
|
59
|
-
|
58
|
+
# Access the module settings
|
59
|
+
#
|
60
|
+
def self.settings
|
61
|
+
@settings ||= {}
|
62
|
+
end
|
60
63
|
end
|
61
64
|
end
|
@@ -4,8 +4,9 @@ module Elasticsearch
|
|
4
4
|
|
5
5
|
# Perform multiple index, delete or update operations in a single request.
|
6
6
|
#
|
7
|
-
#
|
8
|
-
#
|
7
|
+
# Supports various different formats of the payload: Array of Strings, Header/Data pairs,
|
8
|
+
# or the conveniency "combined" format where data is passed along with the header
|
9
|
+
# in a single item in a custom `:data` key.
|
9
10
|
#
|
10
11
|
# @example Perform three operations in a single request, passing actions and data as an array of hashes
|
11
12
|
#
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Elasticsearch
|
2
|
+
module API
|
3
|
+
module Cat
|
4
|
+
module Actions
|
5
|
+
|
6
|
+
# Shows all repositories registered in a cluster
|
7
|
+
#
|
8
|
+
# @example Return list of repositories
|
9
|
+
#
|
10
|
+
# client.cat.repositories
|
11
|
+
#
|
12
|
+
# @example Return only id for each repository
|
13
|
+
#
|
14
|
+
# client.cat.repositories h: 'id'
|
15
|
+
#
|
16
|
+
# @option arguments [Time] :master_timeout Explicit operation timeout for connection to master node
|
17
|
+
# @option arguments [List] :h Comma-separated list of column names to display
|
18
|
+
# @option arguments [Boolean] :help Return help information
|
19
|
+
# @option arguments [Boolean] :v Verbose mode. Display column headers
|
20
|
+
#
|
21
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-repositories.html
|
22
|
+
#
|
23
|
+
def repositories(arguments={})
|
24
|
+
valid_params = [
|
25
|
+
:master_timeout,
|
26
|
+
:h,
|
27
|
+
:help,
|
28
|
+
:v ]
|
29
|
+
|
30
|
+
method = HTTP_GET
|
31
|
+
path = "_cat/repositories"
|
32
|
+
params = Utils.__validate_and_extract_params arguments, valid_params
|
33
|
+
body = nil
|
34
|
+
|
35
|
+
perform_request(method, path, params, body).body
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Elasticsearch
|
2
|
+
module API
|
3
|
+
module Cat
|
4
|
+
module Actions
|
5
|
+
|
6
|
+
# Shows all snapshots that belong to a specific repository
|
7
|
+
#
|
8
|
+
# @example Return snapshots for 'my_repository'
|
9
|
+
#
|
10
|
+
# client.cat.snapshots repository: 'my_repository'
|
11
|
+
#
|
12
|
+
# @example Return id, status and start_epoch for 'my_repository'
|
13
|
+
#
|
14
|
+
# client.cat.snapshots repository: 'my_repository', h: 'id,status,start_epoch'
|
15
|
+
#
|
16
|
+
# @option arguments [Time] :master_timeout Explicit operation timeout for connection to master node
|
17
|
+
# @option arguments [List] :h Comma-separated list of column names to display
|
18
|
+
# @option arguments [Boolean] :help Return help information
|
19
|
+
# @option arguments [Boolean] :v Verbose mode. Display column headers
|
20
|
+
#
|
21
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-snapshots.html
|
22
|
+
#
|
23
|
+
def snapshots(arguments={})
|
24
|
+
raise ArgumentError, "Required argument 'repository' missing" unless arguments[:repository]
|
25
|
+
|
26
|
+
valid_params = [
|
27
|
+
:master_timeout,
|
28
|
+
:h,
|
29
|
+
:help,
|
30
|
+
:v ]
|
31
|
+
|
32
|
+
repository = arguments.delete(:repository)
|
33
|
+
|
34
|
+
method = HTTP_GET
|
35
|
+
path = Utils.__pathify "_cat/snapshots", Utils.__escape(repository)
|
36
|
+
params = Utils.__validate_and_extract_params arguments, valid_params
|
37
|
+
body = nil
|
38
|
+
|
39
|
+
perform_request(method, path, params, body).body
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Elasticsearch
|
2
|
+
module API
|
3
|
+
module Indices
|
4
|
+
module Actions
|
5
|
+
|
6
|
+
# Force merge an index, list of indices, or all indices in the cluster.
|
7
|
+
#
|
8
|
+
# @example Fully force merge an index
|
9
|
+
#
|
10
|
+
# client.indices.forcemerge index: 'foo', max_num_segments: 1
|
11
|
+
#
|
12
|
+
# @example Do not flush index after force-merging
|
13
|
+
#
|
14
|
+
# client.indices.forcemerge index: 'foo', flush: false
|
15
|
+
#
|
16
|
+
# @example Do not expunge deleted documents after force-merging
|
17
|
+
#
|
18
|
+
# client.indices.forcemerge index: 'foo', only_expunge_deletes: false
|
19
|
+
#
|
20
|
+
# @example Force merge a list of indices
|
21
|
+
#
|
22
|
+
# client.indices.forcemerge index: ['foo', 'bar']
|
23
|
+
# client.indices.forcemerge index: 'foo,bar'
|
24
|
+
#
|
25
|
+
# @example forcemerge a list of indices matching wildcard expression
|
26
|
+
#
|
27
|
+
# client.indices.forcemerge index: 'foo*'
|
28
|
+
#
|
29
|
+
# @example forcemerge all indices
|
30
|
+
#
|
31
|
+
# client.indices.forcemerge index: '_all'
|
32
|
+
#
|
33
|
+
# @option arguments [List] :index A comma-separated list of indices to forcemerge;
|
34
|
+
# use `_all` to forcemerge all indices
|
35
|
+
# @option arguments [Number] :max_num_segments The number of segments the index should be merged into
|
36
|
+
# (default: dynamic)
|
37
|
+
# @option arguments [Boolean] :only_expunge_deletes Specify whether the operation should only expunge
|
38
|
+
# deleted documents
|
39
|
+
# @option arguments [Boolean] :flush Specify whether the index should be flushed after performing the operation
|
40
|
+
# (default: true)
|
41
|
+
#
|
42
|
+
# @see http://www.elastic.co/guide/en/elasticsearch/reference/master/indices-forcemerge.html
|
43
|
+
#
|
44
|
+
def forcemerge(arguments={})
|
45
|
+
valid_params = [
|
46
|
+
:max_num_segments,
|
47
|
+
:only_expunge_deletes,
|
48
|
+
:flush
|
49
|
+
]
|
50
|
+
|
51
|
+
method = HTTP_POST
|
52
|
+
path = Utils.__pathify Utils.__listify(arguments[:index]), '_forcemerge'
|
53
|
+
|
54
|
+
params = Utils.__validate_and_extract_params arguments, valid_params
|
55
|
+
body = nil
|
56
|
+
|
57
|
+
perform_request(method, path, params, body).body
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -8,6 +8,8 @@ module Elasticsearch
|
|
8
8
|
# The "optimize" operation merges the index segments, increasing search performance.
|
9
9
|
# It corresponds to a Lucene "merge" operation.
|
10
10
|
#
|
11
|
+
# @deprecated The "optimize" action has been deprecated in favor of forcemerge [https://github.com/elastic/elasticsearch/pull/13778]
|
12
|
+
#
|
11
13
|
# @example Fully optimize an index (merge to one segment)
|
12
14
|
#
|
13
15
|
# client.indices.optimize index: 'foo', max_num_segments: 1, wait_for_merge: false
|
@@ -34,7 +34,8 @@ module Elasticsearch
|
|
34
34
|
valid_params = [
|
35
35
|
:ignore_unavailable,
|
36
36
|
:allow_no_indices,
|
37
|
-
:expand_wildcards
|
37
|
+
:expand_wildcards,
|
38
|
+
:percolate_format ]
|
38
39
|
|
39
40
|
method = HTTP_GET
|
40
41
|
path = "_mpercolate"
|
@@ -44,7 +45,7 @@ module Elasticsearch
|
|
44
45
|
|
45
46
|
case
|
46
47
|
when body.is_a?(Array)
|
47
|
-
payload = body.map { |d| d.is_a?(String) ? d :
|
48
|
+
payload = body.map { |d| d.is_a?(String) ? d : Elasticsearch::API.serializer.dump(d) }
|
48
49
|
payload << "" unless payload.empty?
|
49
50
|
payload = payload.join("\n")
|
50
51
|
else
|
@@ -56,11 +56,11 @@ module Elasticsearch
|
|
56
56
|
sum << data
|
57
57
|
sum
|
58
58
|
end.
|
59
|
-
map { |item|
|
59
|
+
map { |item| Elasticsearch::API.serializer.dump(item) }
|
60
60
|
payload << "" unless payload.empty?
|
61
61
|
payload = payload.join("\n")
|
62
62
|
when body.is_a?(Array)
|
63
|
-
payload = body.map { |d| d.is_a?(String) ? d :
|
63
|
+
payload = body.map { |d| d.is_a?(String) ? d : Elasticsearch::API.serializer.dump(d) }
|
64
64
|
payload << "" unless payload.empty?
|
65
65
|
payload = payload.join("\n")
|
66
66
|
else
|
@@ -158,8 +158,8 @@ module Elasticsearch
|
|
158
158
|
|
159
159
|
body = arguments[:body]
|
160
160
|
|
161
|
-
params[:fields] = Utils.__listify(params[:fields]) if params[:fields]
|
162
|
-
params[:fielddata_fields] = Utils.__listify(params[:fielddata_fields]) if params[:fielddata_fields]
|
161
|
+
params[:fields] = Utils.__listify(params[:fields], :escape => false) if params[:fields]
|
162
|
+
params[:fielddata_fields] = Utils.__listify(params[:fielddata_fields], :escape => false) if params[:fielddata_fields]
|
163
163
|
|
164
164
|
# FIX: Unescape the `filter_path` parameter due to __listify default behavior. Investigate.
|
165
165
|
params[:filter_path] = defined?(EscapeUtils) ? EscapeUtils.unescape_url(params[:filter_path]) : CGI.unescape(params[:filter_path]) if params[:filter_path]
|
@@ -65,6 +65,10 @@ module Elasticsearch
|
|
65
65
|
|
66
66
|
# Convert an array of payloads into Elasticsearch `header\ndata` format
|
67
67
|
#
|
68
|
+
# Supports various different formats of the payload: Array of Strings, Header/Data pairs,
|
69
|
+
# or the conveniency "combined" format where data is passed along with the header
|
70
|
+
# in a single item.
|
71
|
+
#
|
68
72
|
# Elasticsearch::API::Utils.__bulkify [
|
69
73
|
# { :index => { :_index => 'myindexA', :_type => 'mytype', :_id => '1', :data => { :title => 'Test' } } },
|
70
74
|
# { :update => { :_index => 'myindexB', :_type => 'mytype', :_id => '2', :data => { :doc => { :title => 'Update' } } } }
|
@@ -76,22 +80,24 @@ module Elasticsearch
|
|
76
80
|
# # => {"doc":{"title":"Update"}}
|
77
81
|
#
|
78
82
|
def __bulkify(payload)
|
83
|
+
operations = %w[index create delete update]
|
84
|
+
|
79
85
|
case
|
86
|
+
|
80
87
|
# Hashes with `:data`
|
81
|
-
when payload.any? { |d| d.is_a?(Hash) && d.values.first.is_a?(Hash) && (d.values.first[:data] || d.values.first['data']) }
|
88
|
+
when payload.any? { |d| d.is_a?(Hash) && d.values.first.is_a?(Hash) && operations.include?(d.keys.first.to_s) && (d.values.first[:data] || d.values.first['data']) }
|
82
89
|
payload = payload.
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
payload <<
|
94
|
-
return payload.join("\n")
|
90
|
+
inject([]) do |sum, item|
|
91
|
+
operation, meta = item.to_a.first
|
92
|
+
meta = meta.clone
|
93
|
+
data = meta.delete(:data) || meta.delete('data')
|
94
|
+
|
95
|
+
sum << { operation => meta }
|
96
|
+
sum << data if data
|
97
|
+
sum
|
98
|
+
end.
|
99
|
+
map { |item| Elasticsearch::API.serializer.dump(item) }
|
100
|
+
payload << '' unless payload.empty?
|
95
101
|
|
96
102
|
# Array of strings
|
97
103
|
when payload.all? { |d| d.is_a? String }
|
@@ -99,7 +105,7 @@ module Elasticsearch
|
|
99
105
|
|
100
106
|
# Header/Data pairs
|
101
107
|
else
|
102
|
-
payload = payload.map { |item|
|
108
|
+
payload = payload.map { |item| Elasticsearch::API.serializer.dump(item) }
|
103
109
|
payload << ''
|
104
110
|
end
|
105
111
|
|
@@ -293,8 +293,15 @@ suites.each do |suite|
|
|
293
293
|
$client.indices.delete_template name: '*'
|
294
294
|
$client.snapshot.delete repository: 'test_repo_create_1', snapshot: 'test_snapshot', ignore: 404
|
295
295
|
$client.snapshot.delete repository: 'test_repo_restore_1', snapshot: 'test_snapshot', ignore: 404
|
296
|
+
$client.snapshot.delete repository: 'test_cat_snapshots_1', snapshot: 'snap1', ignore: 404
|
297
|
+
$client.snapshot.delete repository: 'test_cat_snapshots_1', snapshot: 'snap2', ignore: 404
|
296
298
|
$client.snapshot.delete_repository repository: 'test_repo_create_1', ignore: 404
|
297
299
|
$client.snapshot.delete_repository repository: 'test_repo_restore_1', ignore: 404
|
300
|
+
$client.snapshot.delete_repository repository: 'test_repo_get_1', ignore: 404
|
301
|
+
$client.snapshot.delete_repository repository: 'test_repo_get_2', ignore: 404
|
302
|
+
$client.snapshot.delete_repository repository: 'test_cat_repo_1', ignore: 404
|
303
|
+
$client.snapshot.delete_repository repository: 'test_cat_repo_2', ignore: 404
|
304
|
+
$client.snapshot.delete_repository repository: 'test_cat_snapshots_1', ignore: 404
|
298
305
|
# FIXME: This shouldn't be needed -------------
|
299
306
|
FileUtils.rm_rf('/tmp/test_repo_create_1_loc')
|
300
307
|
FileUtils.rm_rf('/tmp/test_repo_restore_1_loc')
|
data/test/unit/api_test.rb
CHANGED
data/test/unit/bulk_test.rb
CHANGED
@@ -16,7 +16,7 @@ module Elasticsearch
|
|
16
16
|
if RUBY_1_8
|
17
17
|
lines = body.split("\n")
|
18
18
|
|
19
|
-
assert_equal
|
19
|
+
assert_equal 7, lines.size
|
20
20
|
assert_match /\{"index"\:\{/, lines[0]
|
21
21
|
assert_match /\{"title"\:"Test"/, lines[1]
|
22
22
|
assert_match /\{"update"\:\{/, lines[2]
|
@@ -28,6 +28,8 @@ module Elasticsearch
|
|
28
28
|
{"update":{"_index":"myindexB","_type":"mytype","_id":"2"}}
|
29
29
|
{"doc":{"title":"Update"}}
|
30
30
|
{"delete":{"_index":"myindexC","_type":"mytypeC","_id":"3"}}
|
31
|
+
{"index":{"_index":"myindexD","_type":"mytype","_id":"1"}}
|
32
|
+
{"data":"MYDATA"}
|
31
33
|
PAYLOAD
|
32
34
|
end
|
33
35
|
true
|
@@ -36,7 +38,8 @@ module Elasticsearch
|
|
36
38
|
subject.bulk :body => [
|
37
39
|
{ :index => { :_index => 'myindexA', :_type => 'mytype', :_id => '1', :data => { :title => 'Test' } } },
|
38
40
|
{ :update => { :_index => 'myindexB', :_type => 'mytype', :_id => '2', :data => { :doc => { :title => 'Update' } } } },
|
39
|
-
{ :delete => { :_index => 'myindexC', :_type => 'mytypeC', :_id => '3' } }
|
41
|
+
{ :delete => { :_index => 'myindexC', :_type => 'mytypeC', :_id => '3' } },
|
42
|
+
{ :index => { :_index => 'myindexD', :_type => 'mytype', :_id => '1', :data => { :data => 'MYDATA' } } },
|
40
43
|
]
|
41
44
|
end
|
42
45
|
|
@@ -50,6 +53,32 @@ module Elasticsearch
|
|
50
53
|
subject.bulk :index => 'myindex', :body => []
|
51
54
|
end
|
52
55
|
|
56
|
+
should "handle `:data` keys correctly in header/data payloads" do
|
57
|
+
subject.expects(:perform_request).with do |method, url, params, body|
|
58
|
+
lines = body.split("\n")
|
59
|
+
assert_equal 2, lines.size
|
60
|
+
|
61
|
+
header = MultiJson.load(lines.first)
|
62
|
+
data = MultiJson.load(lines.last)
|
63
|
+
|
64
|
+
assert_equal 'myindex', header['update']['_index']
|
65
|
+
assert_equal 'mytype', header['update']['_type']
|
66
|
+
assert_equal '1', header['update']['_id']
|
67
|
+
|
68
|
+
assert_equal({'data' => { 'title' => 'Update' }}, data['doc'])
|
69
|
+
# assert_equal <<-PAYLOAD.gsub(/^\s+/, ''), body
|
70
|
+
# {"update":{"_index":"myindex","_type":"mytype","_id":"1"}}
|
71
|
+
# {"doc":{"data":{"title":"Update"}}}
|
72
|
+
# PAYLOAD
|
73
|
+
true
|
74
|
+
end.returns(FakeResponse.new)
|
75
|
+
|
76
|
+
subject.bulk :body => [
|
77
|
+
{ :update => { :_index => 'myindex', :_type => 'mytype', :_id => '1' } },
|
78
|
+
{ :doc => { :data => { :title => 'Update' } } }
|
79
|
+
]
|
80
|
+
end
|
81
|
+
|
53
82
|
should "post a string payload" do
|
54
83
|
subject.expects(:perform_request).with do |method, url, params, body|
|
55
84
|
assert_equal "foo\nbar", body
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Elasticsearch
|
4
|
+
module Test
|
5
|
+
class CatRepositoriesTest < ::Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "Cat: Repositories" do
|
8
|
+
subject { FakeClient.new }
|
9
|
+
|
10
|
+
should "perform correct request" do
|
11
|
+
subject.expects(:perform_request).with do |method, url, params, body|
|
12
|
+
assert_equal 'GET', method
|
13
|
+
assert_equal '_cat/repositories', url
|
14
|
+
assert_equal Hash.new, params
|
15
|
+
assert_nil body
|
16
|
+
true
|
17
|
+
end.returns(FakeResponse.new)
|
18
|
+
|
19
|
+
subject.cat.repositories
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Elasticsearch
|
4
|
+
module Test
|
5
|
+
class CatSnapshotsTest < ::Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "Cat: Snapshots" do
|
8
|
+
subject { FakeClient.new }
|
9
|
+
|
10
|
+
should "perform correct request" do
|
11
|
+
subject.expects(:perform_request).with do |method, url, params, body|
|
12
|
+
assert_equal 'GET', method
|
13
|
+
assert_equal '_cat/snapshots/foo', url
|
14
|
+
assert_equal Hash.new, params
|
15
|
+
assert_nil body
|
16
|
+
true
|
17
|
+
end.returns(FakeResponse.new)
|
18
|
+
|
19
|
+
subject.cat.snapshots :repository => 'foo'
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Elasticsearch
|
4
|
+
module Test
|
5
|
+
class IndicesForcemergeTest < ::Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "Indices: Forcemerge" do
|
8
|
+
subject { FakeClient.new }
|
9
|
+
|
10
|
+
should "perform correct request" do
|
11
|
+
subject.expects(:perform_request).with do |method, url, params, body|
|
12
|
+
assert_equal 'POST', method
|
13
|
+
assert_equal '_forcemerge', url
|
14
|
+
assert_equal Hash.new, params
|
15
|
+
assert_nil body
|
16
|
+
true
|
17
|
+
end.returns(FakeResponse.new)
|
18
|
+
|
19
|
+
subject.indices.forcemerge
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/test/unit/search_test.rb
CHANGED
@@ -101,6 +101,14 @@ module Elasticsearch
|
|
101
101
|
subject.search :index => 'foo^bar', :type => 'bar/bam'
|
102
102
|
end
|
103
103
|
|
104
|
+
should "not URL-escape the fields parameters" do
|
105
|
+
subject.expects(:perform_request).with do |method, url, params, body|
|
106
|
+
assert_equal 'foo^bar', params[:fields]
|
107
|
+
true
|
108
|
+
end.returns(FakeResponse.new)
|
109
|
+
|
110
|
+
subject.search :index => 'foo', :type => 'bar', :fields => 'foo^bar'
|
111
|
+
end
|
104
112
|
end
|
105
113
|
|
106
114
|
end
|
data/test/unit/utils_test.rb
CHANGED
@@ -132,8 +132,8 @@ module Elasticsearch
|
|
132
132
|
PAYLOAD
|
133
133
|
end
|
134
134
|
|
135
|
-
should "not modify the original payload" do
|
136
|
-
original = [ { :index => {:foo => 'bar', :data => {
|
135
|
+
should "not modify the original payload with the data option" do
|
136
|
+
original = [ { :index => {:foo => 'bar', :data => {:moo => 'bam'} } } ]
|
137
137
|
result = Elasticsearch::API::Utils.__bulkify original
|
138
138
|
assert_not_nil original.first[:index][:data], "Deleted :data from #{original}"
|
139
139
|
assert_equal <<-PAYLOAD.gsub(/^\s+/, ''), result
|
@@ -142,6 +142,23 @@ module Elasticsearch
|
|
142
142
|
PAYLOAD
|
143
143
|
end
|
144
144
|
|
145
|
+
should "not modify the original payload with meta/data pairs" do
|
146
|
+
original = [ { :index => {:foo => 'bar'} }, { :data => {:a => 'b', :data => {:c => 'd'} } } ]
|
147
|
+
result = Elasticsearch::API::Utils.__bulkify original
|
148
|
+
|
149
|
+
assert_not_nil original.last[:data], "Deleted :data from #{original}"
|
150
|
+
assert_not_nil original.last[:data][:data], "Deleted :data from #{original}"
|
151
|
+
|
152
|
+
lines = result.split("\n")
|
153
|
+
assert_equal 2, lines.size
|
154
|
+
|
155
|
+
header = MultiJson.load(lines.first)
|
156
|
+
data = MultiJson.load(lines.last)
|
157
|
+
|
158
|
+
assert_equal 'bar', header['index']['foo']
|
159
|
+
assert_equal 'b', data['data']['a']
|
160
|
+
assert_equal 'd', data['data']['data']['c']
|
161
|
+
end
|
145
162
|
end
|
146
163
|
|
147
164
|
context "__validate_and_extract_params" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticsearch-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.16.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karel Minarik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "<"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
47
|
+
version: '11.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "<"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
54
|
+
version: '11.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: elasticsearch
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -366,8 +366,10 @@ files:
|
|
366
366
|
- lib/elasticsearch/api/actions/cat/pending_tasks.rb
|
367
367
|
- lib/elasticsearch/api/actions/cat/plugins.rb
|
368
368
|
- lib/elasticsearch/api/actions/cat/recovery.rb
|
369
|
+
- lib/elasticsearch/api/actions/cat/repositories.rb
|
369
370
|
- lib/elasticsearch/api/actions/cat/segments.rb
|
370
371
|
- lib/elasticsearch/api/actions/cat/shards.rb
|
372
|
+
- lib/elasticsearch/api/actions/cat/snapshots.rb
|
371
373
|
- lib/elasticsearch/api/actions/cat/thread_pool.rb
|
372
374
|
- lib/elasticsearch/api/actions/clear_scroll.rb
|
373
375
|
- lib/elasticsearch/api/actions/cluster/get_settings.rb
|
@@ -406,6 +408,7 @@ files:
|
|
406
408
|
- lib/elasticsearch/api/actions/indices/exists_type.rb
|
407
409
|
- lib/elasticsearch/api/actions/indices/flush.rb
|
408
410
|
- lib/elasticsearch/api/actions/indices/flush_synced.rb
|
411
|
+
- lib/elasticsearch/api/actions/indices/forcemerge.rb
|
409
412
|
- lib/elasticsearch/api/actions/indices/get.rb
|
410
413
|
- lib/elasticsearch/api/actions/indices/get_alias.rb
|
411
414
|
- lib/elasticsearch/api/actions/indices/get_aliases.rb
|
@@ -492,8 +495,10 @@ files:
|
|
492
495
|
- test/unit/cat/pending_tasks_test.rb
|
493
496
|
- test/unit/cat/plugins_test.rb
|
494
497
|
- test/unit/cat/recovery_test.rb
|
498
|
+
- test/unit/cat/repositories_test.rb
|
495
499
|
- test/unit/cat/segments_test.rb
|
496
500
|
- test/unit/cat/shards_test.rb
|
501
|
+
- test/unit/cat/snapshots_test.rb
|
497
502
|
- test/unit/cat/thread_pool_test.rb
|
498
503
|
- test/unit/clear_scroll_test.rb
|
499
504
|
- test/unit/client_test.rb
|
@@ -534,6 +539,7 @@ files:
|
|
534
539
|
- test/unit/indices/exists_type_test.rb
|
535
540
|
- test/unit/indices/flush_synced_test.rb
|
536
541
|
- test/unit/indices/flush_test.rb
|
542
|
+
- test/unit/indices/forcemerge_test.rb
|
537
543
|
- test/unit/indices/get_alias_test.rb
|
538
544
|
- test/unit/indices/get_aliases_test.rb
|
539
545
|
- test/unit/indices/get_field_mapping_test.rb
|
@@ -619,9 +625,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
619
625
|
version: '0'
|
620
626
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
621
627
|
requirements:
|
622
|
-
- - "
|
628
|
+
- - ">"
|
623
629
|
- !ruby/object:Gem::Version
|
624
|
-
version:
|
630
|
+
version: 1.3.1
|
625
631
|
requirements: []
|
626
632
|
rubyforge_project:
|
627
633
|
rubygems_version: 2.2.2
|
@@ -648,8 +654,10 @@ test_files:
|
|
648
654
|
- test/unit/cat/pending_tasks_test.rb
|
649
655
|
- test/unit/cat/plugins_test.rb
|
650
656
|
- test/unit/cat/recovery_test.rb
|
657
|
+
- test/unit/cat/repositories_test.rb
|
651
658
|
- test/unit/cat/segments_test.rb
|
652
659
|
- test/unit/cat/shards_test.rb
|
660
|
+
- test/unit/cat/snapshots_test.rb
|
653
661
|
- test/unit/cat/thread_pool_test.rb
|
654
662
|
- test/unit/clear_scroll_test.rb
|
655
663
|
- test/unit/client_test.rb
|
@@ -690,6 +698,7 @@ test_files:
|
|
690
698
|
- test/unit/indices/exists_type_test.rb
|
691
699
|
- test/unit/indices/flush_synced_test.rb
|
692
700
|
- test/unit/indices/flush_test.rb
|
701
|
+
- test/unit/indices/forcemerge_test.rb
|
693
702
|
- test/unit/indices/get_alias_test.rb
|
694
703
|
- test/unit/indices/get_aliases_test.rb
|
695
704
|
- test/unit/indices/get_field_mapping_test.rb
|