arelastic 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/arelastic/aggregations.rb +2 -0
- data/lib/arelastic/aggregations/bucket_selector.rb +23 -0
- data/lib/arelastic/aggregations/bucket_sort.rb +37 -0
- data/test/arelastic/aggregations/bucket_selector_test.rb +25 -0
- data/test/arelastic/aggregations/bucket_sort_test.rb +25 -0
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b92131dd2729b5be9ad302a31d33db3482ecc47dee0b97681b3cca050cf627ba
|
4
|
+
data.tar.gz: d2c3fa9dc8ffe7c8f1c268c030964f23281b15dcba1655bc845d6c5ce8a91862
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e1e3bbdb544e0ee9b39b8c48100339e4340a0adf5985c5a524187ca7758798f596fdf2f7fb3ed221a5334f9f882e037d740267fa29a5cd434c3c13c015fdc3c
|
7
|
+
data.tar.gz: 7e3578aa3af4ca0efb60fe148a0cd611144d76c9e18b5a78623f43778b3b792e5987a8745dde2e175002e50a4781227bf86500f72716efab76b26387392a4337
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'arelastic/aggregations/aggregation'
|
2
2
|
require 'arelastic/aggregations/bucket'
|
3
3
|
|
4
|
+
require 'arelastic/aggregations/bucket_sort'
|
5
|
+
require 'arelastic/aggregations/bucket_selector'
|
4
6
|
require 'arelastic/aggregations/cardinality'
|
5
7
|
require 'arelastic/aggregations/date_histogram'
|
6
8
|
require 'arelastic/aggregations/filter'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Arelastic
|
2
|
+
module Aggregations
|
3
|
+
class BucketSelector < Arelastic::Aggregations::Aggregation
|
4
|
+
attr_accessor :script_params, :script
|
5
|
+
|
6
|
+
def initialize(name, options = {})
|
7
|
+
options = options.dup
|
8
|
+
@script_params = read_option! options, 'script_params'
|
9
|
+
@script = read_option! options, 'script'
|
10
|
+
super(name, options)
|
11
|
+
end
|
12
|
+
|
13
|
+
def as_elastic_aggregation
|
14
|
+
{
|
15
|
+
'bucket_selector' => {
|
16
|
+
'buckets_path' => script_params,
|
17
|
+
'script' => script
|
18
|
+
}
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Arelastic
|
2
|
+
module Aggregations
|
3
|
+
class BucketSort < Arelastic::Aggregations::Aggregation
|
4
|
+
attr_accessor :from, :size, :sort
|
5
|
+
|
6
|
+
def initialize(name, options = {})
|
7
|
+
options = options.dup
|
8
|
+
@from = read_option! options, 'from'
|
9
|
+
@size = read_option! options, 'size'
|
10
|
+
@sort = read_option! options, 'sort'
|
11
|
+
super(name, options)
|
12
|
+
end
|
13
|
+
|
14
|
+
def as_elastic_aggregation
|
15
|
+
bucket_sort = {}
|
16
|
+
bucket_sort['sort'] = parse_sort if sort
|
17
|
+
bucket_sort['from'] = from if from
|
18
|
+
bucket_sort['size'] = size if size
|
19
|
+
{ 'bucket_sort' => bucket_sort }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def parse_sort
|
25
|
+
if sort.is_a?(Hash)
|
26
|
+
sort.map { |bucket_path, order| { bucket_path => order } }
|
27
|
+
elsif sort.is_a?(String)
|
28
|
+
[sort]
|
29
|
+
elsif sort.is_a?(Array)
|
30
|
+
sort
|
31
|
+
else
|
32
|
+
raise TypeError.new('Expecting a hash, string, or array as the "sort" argument')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Arelastic::Aggregations::BucketSelectorTest < Minitest::Test
|
4
|
+
def test_as_elastic
|
5
|
+
aggregation = Arelastic::Aggregations::BucketSelector.new('foo_agg',
|
6
|
+
script_params: {
|
7
|
+
'foo_bucket' => 'foo_bucket_path',
|
8
|
+
'bar_bucket' => 'bar_bucket_path'
|
9
|
+
},
|
10
|
+
script: "params.foo_bucket > 10 && params.bar_bucket < 100"
|
11
|
+
)
|
12
|
+
expected = {
|
13
|
+
'foo_agg' => {
|
14
|
+
'bucket_selector' => {
|
15
|
+
'buckets_path' => {
|
16
|
+
'foo_bucket' => 'foo_bucket_path',
|
17
|
+
'bar_bucket' => 'bar_bucket_path'
|
18
|
+
},
|
19
|
+
'script' => 'params.foo_bucket > 10 && params.bar_bucket < 100'
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
assert_equal expected, aggregation.as_elastic
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Arelastic::Aggregations::BucketSortTest < Minitest::Test
|
4
|
+
def test_parse_sort
|
5
|
+
assert_equal ['foo'], parse_sort('foo')
|
6
|
+
assert_equal [{'foo' => 'desc'}, {'bar' => 'asc'}], parse_sort({'foo' => 'desc', 'bar' => 'asc'})
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_size_and_from
|
10
|
+
aggregation = Arelastic::Aggregations::BucketSort.new('foo_agg', 'size' => 3, 'from' => 5)
|
11
|
+
expected = {
|
12
|
+
'foo_agg' => {
|
13
|
+
'bucket_sort' => {
|
14
|
+
'from' => 5,
|
15
|
+
'size' => 3
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
assert_equal expected, aggregation.as_elastic
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse_sort(sort)
|
23
|
+
Arelastic::Aggregations::BucketSort.new('foosort', sort: sort).as_elastic['foosort']['bucket_sort']['sort']
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arelastic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Higgins
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Build Elastic Search queries with objects
|
14
14
|
email: developer@matthewhiggins.com
|
@@ -22,6 +22,8 @@ files:
|
|
22
22
|
- lib/arelastic/aggregations.rb
|
23
23
|
- lib/arelastic/aggregations/aggregation.rb
|
24
24
|
- lib/arelastic/aggregations/bucket.rb
|
25
|
+
- lib/arelastic/aggregations/bucket_selector.rb
|
26
|
+
- lib/arelastic/aggregations/bucket_sort.rb
|
25
27
|
- lib/arelastic/aggregations/cardinality.rb
|
26
28
|
- lib/arelastic/aggregations/date_histogram.rb
|
27
29
|
- lib/arelastic/aggregations/filter.rb
|
@@ -101,6 +103,8 @@ files:
|
|
101
103
|
- lib/arelastic/sorts/geo_distance.rb
|
102
104
|
- lib/arelastic/sorts/sort.rb
|
103
105
|
- test/arelastic/aggregations/aggregation_test.rb
|
106
|
+
- test/arelastic/aggregations/bucket_selector_test.rb
|
107
|
+
- test/arelastic/aggregations/bucket_sort_test.rb
|
104
108
|
- test/arelastic/aggregations/bucket_test.rb
|
105
109
|
- test/arelastic/aggregations/cardinality_test.rb
|
106
110
|
- test/arelastic/aggregations/date_histogram_test.rb
|
@@ -156,7 +160,7 @@ homepage: http://github.com/matthuhiggins/arelastic
|
|
156
160
|
licenses:
|
157
161
|
- MIT
|
158
162
|
metadata: {}
|
159
|
-
post_install_message:
|
163
|
+
post_install_message:
|
160
164
|
rdoc_options: []
|
161
165
|
require_paths:
|
162
166
|
- lib
|
@@ -171,8 +175,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
175
|
- !ruby/object:Gem::Version
|
172
176
|
version: '0'
|
173
177
|
requirements: []
|
174
|
-
rubygems_version: 3.
|
175
|
-
signing_key:
|
178
|
+
rubygems_version: 3.2.15
|
179
|
+
signing_key:
|
176
180
|
specification_version: 4
|
177
181
|
summary: Elastic Search query builder
|
178
182
|
test_files: []
|