elasticsearch-api 1.0.15 → 1.0.16.pre
Sign up to get free protection for your applications and to get access to all the features.
- 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
|