elasticsearch 8.13.0 → 8.14.0
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/elasticsearch.gemspec +1 -1
- data/lib/elasticsearch/helpers/bulk_helper.rb +3 -1
- data/lib/elasticsearch/helpers/esql_helper.rb +2 -1
- data/lib/elasticsearch/version.rb +1 -1
- data/spec/integration/characters_escaping_spec.rb +2 -2
- data/spec/integration/client_integration_spec.rb +3 -2
- data/spec/integration/helpers/bulk_helper_spec.rb +5 -0
- data/spec/integration/helpers/esql_helper_spec.rb +26 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 829c510c4fb0664f58d4be87a7d0d8eed2906b68e659f63b33a7e082cba6c1ee
|
4
|
+
data.tar.gz: bafb973a40c4eda2a5de4fb0abe5a7f4308efbe8105f531545953a405d2cb83f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c98e9e0c6cc219b281da17019021ce7bd7e28120c9390b05dd71550bf2527c99570002f779f504f10820effe1fc2cd0b2824213bb445184fb7b77eabc69532b
|
7
|
+
data.tar.gz: 6178b702bd1077554debcf12783ffd1cda149c507c87284cbe60028a0f06fe0db8f2c140f3c29fd19fca23ec456012087ff25f6dcec34553e63d550146248ede
|
data/elasticsearch.gemspec
CHANGED
@@ -46,7 +46,7 @@ Gem::Specification.new do |s|
|
|
46
46
|
s.required_ruby_version = '>= 2.5'
|
47
47
|
|
48
48
|
s.add_dependency 'elastic-transport', '~> 8.3'
|
49
|
-
s.add_dependency 'elasticsearch-api', '8.
|
49
|
+
s.add_dependency 'elasticsearch-api', '8.14.0'
|
50
50
|
|
51
51
|
s.add_development_dependency 'base64'
|
52
52
|
s.add_development_dependency 'bundler'
|
@@ -48,7 +48,9 @@ module Elasticsearch
|
|
48
48
|
def ingest(docs, params = {}, body = {}, &block)
|
49
49
|
ingest_docs = docs.map { |doc| { index: { _index: @index, data: doc} } }
|
50
50
|
if (slice = params.delete(:slice))
|
51
|
-
ingest_docs.each_slice(slice)
|
51
|
+
ingest_docs.each_slice(slice) do |items|
|
52
|
+
ingest(items.map { |item| item[:index][:data] }, params, &block)
|
53
|
+
end
|
52
54
|
else
|
53
55
|
bulk_request(ingest_docs, params, &block)
|
54
56
|
end
|
@@ -57,11 +57,12 @@ module Elasticsearch
|
|
57
57
|
#
|
58
58
|
def self.query(client, query, params = {}, parser: {})
|
59
59
|
response = client.esql.query({ body: { query: query }, format: 'json' }.merge(params))
|
60
|
+
|
60
61
|
columns = response['columns']
|
61
62
|
response['values'].map do |value|
|
62
63
|
(value.length - 1).downto(0).map do |index|
|
63
64
|
key = columns[index]['name']
|
64
|
-
value[index] = parser[key].call
|
65
|
+
value[index] = parser[key].call(value[index]) if value[index] && parser[key]
|
65
66
|
{ key => value[index] }
|
66
67
|
end.reduce({}, :merge)
|
67
68
|
end
|
@@ -14,11 +14,11 @@
|
|
14
14
|
# KIND, either express or implied. See the License for the
|
15
15
|
# specific language governing permissions and limitations
|
16
16
|
# under the License.
|
17
|
+
require 'spec_helper'
|
18
|
+
|
17
19
|
ELASTICSEARCH_URL = ENV['TEST_ES_SERVER'] || "http://localhost:#{(ENV['PORT'] || 9200)}"
|
18
20
|
raise URI::InvalidURIError unless ELASTICSEARCH_URL =~ /\A#{URI::DEFAULT_PARSER.make_regexp}\z/
|
19
21
|
|
20
|
-
require 'spec_helper'
|
21
|
-
|
22
22
|
context 'Elasticsearch client' do
|
23
23
|
let(:client) do
|
24
24
|
Elasticsearch::Client.new(host: ELASTICSEARCH_URL, user: 'elastic', password: 'changeme')
|
@@ -14,12 +14,13 @@
|
|
14
14
|
# KIND, either express or implied. See the License for the
|
15
15
|
# specific language governing permissions and limitations
|
16
16
|
# under the License.
|
17
|
-
ELASTICSEARCH_URL = ENV['TEST_ES_SERVER'] || "http://localhost:#{(ENV['PORT'] || 9200)}"
|
18
|
-
raise URI::InvalidURIError unless ELASTICSEARCH_URL =~ /\A#{URI::DEFAULT_PARSER.make_regexp}\z/
|
19
17
|
|
20
18
|
require 'spec_helper'
|
21
19
|
require 'logger'
|
22
20
|
|
21
|
+
ELASTICSEARCH_URL = ENV['TEST_ES_SERVER'] || "http://localhost:#{(ENV['PORT'] || 9200)}"
|
22
|
+
raise URI::InvalidURIError unless ELASTICSEARCH_URL =~ /\A#{URI::DEFAULT_PARSER.make_regexp}\z/
|
23
|
+
|
23
24
|
context 'Elasticsearch client' do
|
24
25
|
let(:logger) { Logger.new($stderr) }
|
25
26
|
|
@@ -21,6 +21,7 @@ require 'tempfile'
|
|
21
21
|
context 'Elasticsearch client helpers' do
|
22
22
|
context 'Bulk helper' do
|
23
23
|
let(:index) { 'bulk_animals' }
|
24
|
+
let(:index_slice) { 'bulk_animals_slice' }
|
24
25
|
let(:params) { { refresh: 'wait_for' } }
|
25
26
|
let(:bulk_helper) { Elasticsearch::Helpers::BulkHelper.new(client, index, params) }
|
26
27
|
let(:docs) do
|
@@ -40,6 +41,7 @@ context 'Elasticsearch client helpers' do
|
|
40
41
|
|
41
42
|
after do
|
42
43
|
client.indices.delete(index: index, ignore: 404)
|
44
|
+
client.indices.delete(index: index_slice, ignore: 404)
|
43
45
|
end
|
44
46
|
|
45
47
|
it 'Ingests documents' do
|
@@ -76,10 +78,13 @@ context 'Elasticsearch client helpers' do
|
|
76
78
|
|
77
79
|
it 'Ingests documents and yields response and docs' do
|
78
80
|
slice = 2
|
81
|
+
bulk_helper = Elasticsearch::Helpers::BulkHelper.new(client, index_slice, params)
|
79
82
|
response = bulk_helper.ingest(docs, {slice: slice}) do |response, docs|
|
80
83
|
expect(response).to be_an_instance_of Elasticsearch::API::Response
|
81
84
|
expect(docs.count).to eq slice
|
82
85
|
end
|
86
|
+
response = client.search(index: index_slice, size: 200)
|
87
|
+
expect(response['hits']['hits'].map { |a| a['_source'].transform_keys(&:to_sym) }).to eq docs
|
83
88
|
end
|
84
89
|
|
85
90
|
context 'JSON File helper' do
|
@@ -16,6 +16,7 @@
|
|
16
16
|
# under the License.
|
17
17
|
require_relative 'helpers_spec_helper'
|
18
18
|
require 'elasticsearch/helpers/esql_helper'
|
19
|
+
require 'ipaddr'
|
19
20
|
|
20
21
|
context 'Elasticsearch client helpers' do
|
21
22
|
let(:index) { 'esql_helper_test' }
|
@@ -76,8 +77,6 @@ context 'Elasticsearch client helpers' do
|
|
76
77
|
end
|
77
78
|
|
78
79
|
it 'parses iterated objects when procs are passed in' do
|
79
|
-
require 'ipaddr'
|
80
|
-
|
81
80
|
parser = {
|
82
81
|
'@timestamp' => Proc.new { |t| DateTime.parse(t) },
|
83
82
|
'client.ip' => Proc.new { |i| IPAddr.new(i) },
|
@@ -91,4 +90,29 @@ context 'Elasticsearch client helpers' do
|
|
91
90
|
expect(r['event.duration']).to be_a String
|
92
91
|
end
|
93
92
|
end
|
93
|
+
|
94
|
+
it 'parser does not error when value is nil, leaves nil' do
|
95
|
+
client.index(
|
96
|
+
index: index,
|
97
|
+
body: {
|
98
|
+
'@timestamp' => nil,
|
99
|
+
'client.ip' => nil,
|
100
|
+
message: 'Connected to 10.1.0.1',
|
101
|
+
'event.duration' => 1756465
|
102
|
+
},
|
103
|
+
refresh: true
|
104
|
+
)
|
105
|
+
parser = {
|
106
|
+
'@timestamp' => Proc.new { |t| DateTime.parse(t) },
|
107
|
+
'client.ip' => Proc.new { |i| IPAddr.new(i) },
|
108
|
+
'event.duration' => Proc.new { |d| d.to_s }
|
109
|
+
}
|
110
|
+
response = esql_helper.query(client, query, parser: parser)
|
111
|
+
response.each do |r|
|
112
|
+
expect [DateTime, NilClass].include?(r['@timestamp'].class)
|
113
|
+
expect [IPAddr, NilClass].include?(r['client.ip'].class)
|
114
|
+
expect(r['message']).to be_a String
|
115
|
+
expect(r['event.duration']).to be_a String
|
116
|
+
end
|
117
|
+
end
|
94
118
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticsearch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic Client Library Maintainers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: elastic-transport
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 8.
|
33
|
+
version: 8.14.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 8.
|
40
|
+
version: 8.14.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: base64
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -257,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
257
257
|
- !ruby/object:Gem::Version
|
258
258
|
version: '0'
|
259
259
|
requirements: []
|
260
|
-
rubygems_version: 3.5.
|
260
|
+
rubygems_version: 3.5.9
|
261
261
|
signing_key:
|
262
262
|
specification_version: 4
|
263
263
|
summary: Ruby integrations for Elasticsearch
|