arelastic 3.1.0 → 3.3.2
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/README.md +2 -4
- data/lib/arelastic/aggregations/bucket_selector.rb +1 -15
- data/lib/arelastic/aggregations/bucket_sort.rb +5 -24
- data/lib/arelastic/aggregations/sum.rb +9 -0
- data/lib/arelastic/aggregations.rb +1 -0
- data/lib/arelastic/builders/queries.rb +1 -0
- data/lib/arelastic/queries/has_parent.rb +21 -0
- data/lib/arelastic/queries/query.rb +8 -0
- data/lib/arelastic/queries.rb +1 -0
- data/test/arelastic/aggregations/bucket_selector_test.rb +12 -12
- data/test/arelastic/aggregations/bucket_sort_test.rb +32 -12
- data/test/arelastic/aggregations/sum_test.rb +16 -0
- data/test/arelastic/queries/has_parent_test.rb +9 -0
- data/test/arelastic/queries/query_test.rb +30 -0
- data/test/helper.rb +2 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2795d56fffdc0a61f805e08103f757e3d9d6733e494cb6f6483439b105fc23e4
|
4
|
+
data.tar.gz: 7812934cd5319e2404c80fd55fbfdccf5fed51c951c3f4a2659624772b668514
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5d90ef13123ff1a5eb7e03b7abd2839767697b6cf6905932eafc08fed5e92423da48f7b2111b82633514fea062563d658a60a06e110a7673474aa9145357f20
|
7
|
+
data.tar.gz: 7ae6737a2b74e4081d8a4202a7c01e7e10d8b037cb3b4b238dbf4602faa8a2b55e0e49b143ceb0e2df80de02cf831be15f69bdb183c1ea95dfd71b25c6bb780f
|
data/README.md
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
[](https://travis-ci.org/matthuhiggins/arelastic) [](https://codeclimate.com/github/matthuhiggins/arelastic)
|
2
2
|
# Arelastic
|
3
3
|
|
4
|
-
Arelastic is a
|
4
|
+
Arelastic is a ElasticSearch AST manager for Ruby. It simplifies the generation complex of Elasticsearch queries.
|
5
5
|
|
6
|
-
It
|
7
|
-
|
8
|
-
One example is [Elastic Record](https://github.com/data-axle/elastic_record)
|
6
|
+
It was extracted from my [Elastic Record](https://github.com/data-axle/elastic_record) project.
|
9
7
|
|
10
8
|
## Usage
|
11
9
|
|
@@ -1,22 +1,8 @@
|
|
1
1
|
module Arelastic
|
2
2
|
module Aggregations
|
3
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
4
|
def as_elastic_aggregation
|
14
|
-
{
|
15
|
-
'bucket_selector' => {
|
16
|
-
'buckets_path' => script_params,
|
17
|
-
'script' => script
|
18
|
-
}
|
19
|
-
}
|
5
|
+
{ 'bucket_selector' => options }
|
20
6
|
end
|
21
7
|
end
|
22
8
|
end
|
@@ -1,37 +1,18 @@
|
|
1
1
|
module Arelastic
|
2
2
|
module Aggregations
|
3
3
|
class BucketSort < Arelastic::Aggregations::Aggregation
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :sort
|
5
5
|
|
6
6
|
def initialize(name, options = {})
|
7
|
-
|
8
|
-
@from = read_option! options, 'from'
|
9
|
-
@size = read_option! options, 'size'
|
7
|
+
super
|
10
8
|
@sort = read_option! options, 'sort'
|
11
|
-
super(name, options)
|
12
9
|
end
|
13
10
|
|
14
11
|
def as_elastic_aggregation
|
15
|
-
|
16
|
-
|
17
|
-
bucket_sort
|
18
|
-
bucket_sort['size'] = size if size
|
19
|
-
{ 'bucket_sort' => bucket_sort }
|
12
|
+
params = options
|
13
|
+
params = params.merge('sort' => convert_to_elastic(sort)) if sort
|
14
|
+
{ 'bucket_sort' => params }
|
20
15
|
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
16
|
end
|
36
17
|
end
|
37
18
|
end
|
@@ -14,5 +14,6 @@ require 'arelastic/aggregations/nested'
|
|
14
14
|
require 'arelastic/aggregations/range'
|
15
15
|
require 'arelastic/aggregations/reverse_nested'
|
16
16
|
require 'arelastic/aggregations/sampler'
|
17
|
+
require 'arelastic/aggregations/sum'
|
17
18
|
require 'arelastic/aggregations/terms'
|
18
19
|
require 'arelastic/aggregations/value_count'
|
@@ -14,6 +14,7 @@ module Arelastic
|
|
14
14
|
geo_distance: Arelastic::Queries::GeoDistance,
|
15
15
|
geo_polygon: Arelastic::Queries::GeoPolygon,
|
16
16
|
has_child: Arelastic::Queries::HasChild,
|
17
|
+
has_parent: Arelastic::Queries::HasParent,
|
17
18
|
ids: Arelastic::Queries::Ids,
|
18
19
|
limit: Arelastic::Queries::Limit,
|
19
20
|
match: Arelastic::Queries::Match,
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Arelastic
|
2
|
+
module Queries
|
3
|
+
class HasParent < Arelastic::Queries::Query
|
4
|
+
attr_reader :parent_type, :query
|
5
|
+
|
6
|
+
def initialize parent_type, query
|
7
|
+
@parent_type = parent_type
|
8
|
+
@query = query
|
9
|
+
end
|
10
|
+
|
11
|
+
def as_elastic
|
12
|
+
{
|
13
|
+
"has_parent" => {
|
14
|
+
"parent_type" => parent_type,
|
15
|
+
"query" => convert_to_elastic(query)
|
16
|
+
}
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -5,6 +5,14 @@ module Arelastic
|
|
5
5
|
Arelastic::Queries::Nested.new path, self
|
6
6
|
end
|
7
7
|
|
8
|
+
def has_child path
|
9
|
+
Arelastic::Queries::HasChild.new path, self
|
10
|
+
end
|
11
|
+
|
12
|
+
def has_parent path
|
13
|
+
Arelastic::Queries::HasParent.new path, self
|
14
|
+
end
|
15
|
+
|
8
16
|
def negate
|
9
17
|
Arelastic::Queries::Bool.new must_not: self
|
10
18
|
end
|
data/lib/arelastic/queries.rb
CHANGED
@@ -12,6 +12,7 @@ require 'arelastic/queries/geo_bounding_box'
|
|
12
12
|
require 'arelastic/queries/geo_distance'
|
13
13
|
require 'arelastic/queries/geo_polygon'
|
14
14
|
require 'arelastic/queries/has_child'
|
15
|
+
require 'arelastic/queries/has_parent'
|
15
16
|
require 'arelastic/queries/ids'
|
16
17
|
require 'arelastic/queries/limit'
|
17
18
|
require 'arelastic/queries/match'
|
@@ -1,22 +1,22 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
class Arelastic::Aggregations::BucketSelectorTest < Minitest::Test
|
4
4
|
def test_as_elastic
|
5
|
-
aggregation = Arelastic::Aggregations::BucketSelector.new(
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
aggregation = Arelastic::Aggregations::BucketSelector.new("foo_agg",
|
6
|
+
"buckets_path" => {
|
7
|
+
"foo_bucket" => "foo_bucket_path",
|
8
|
+
"bar_bucket" => "bar_bucket_path"
|
9
9
|
},
|
10
|
-
script
|
10
|
+
"script" => "params.foo_bucket > 10 && params.bar_bucket < 100"
|
11
11
|
)
|
12
12
|
expected = {
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
"foo_agg" => {
|
14
|
+
"bucket_selector" => {
|
15
|
+
"buckets_path" => {
|
16
|
+
"foo_bucket" => "foo_bucket_path",
|
17
|
+
"bar_bucket" => "bar_bucket_path"
|
18
18
|
},
|
19
|
-
|
19
|
+
"script" => "params.foo_bucket > 10 && params.bar_bucket < 100"
|
20
20
|
}
|
21
21
|
}
|
22
22
|
}
|
@@ -1,25 +1,45 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
class Arelastic::Aggregations::BucketSortTest < Minitest::Test
|
4
|
-
def
|
5
|
-
|
6
|
-
|
4
|
+
def test_as_elastic
|
5
|
+
aggregation = Arelastic::Aggregations::BucketSort.new("foo_agg", "size" => 3, "from" => 5, "sort" => "price")
|
6
|
+
|
7
|
+
expected = {
|
8
|
+
"foo_agg" => {
|
9
|
+
"bucket_sort" => {
|
10
|
+
"sort" => "price",
|
11
|
+
"from" => 5,
|
12
|
+
"size" => 3
|
13
|
+
}
|
14
|
+
}
|
15
|
+
}
|
16
|
+
assert_equal expected, aggregation.as_elastic
|
7
17
|
end
|
8
18
|
|
9
|
-
def
|
10
|
-
|
19
|
+
def test_arelastic_sort
|
20
|
+
sort = Arelastic::Sorts::Field.new("price" => "desc")
|
21
|
+
aggregation = Arelastic::Aggregations::BucketSort.new("foo_agg", "sort" => sort)
|
22
|
+
|
11
23
|
expected = {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
'size' => 3
|
24
|
+
"foo_agg" => {
|
25
|
+
"bucket_sort" => {
|
26
|
+
"sort" => {"price" => "desc"}
|
16
27
|
}
|
17
28
|
}
|
18
29
|
}
|
19
30
|
assert_equal expected, aggregation.as_elastic
|
20
31
|
end
|
21
32
|
|
22
|
-
def
|
23
|
-
Arelastic::Aggregations::BucketSort.new(
|
33
|
+
def test_optional_sort
|
34
|
+
aggregation = Arelastic::Aggregations::BucketSort.new("foo_agg", "size" => 3)
|
35
|
+
|
36
|
+
expected = {
|
37
|
+
"foo_agg" => {
|
38
|
+
"bucket_sort" => {
|
39
|
+
"size" => 3
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
assert_equal expected, aggregation.as_elastic
|
24
44
|
end
|
25
45
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Arelastic::Aggregations::SumTest < Minitest::Test
|
4
|
+
def test_as_elastic
|
5
|
+
aggregation = Arelastic::Aggregations::Sum.new('foo', 'field' => 'bar_count')
|
6
|
+
|
7
|
+
expected = {
|
8
|
+
"foo" => {
|
9
|
+
"sum" => {
|
10
|
+
"field" => "bar_count"
|
11
|
+
}
|
12
|
+
}
|
13
|
+
}
|
14
|
+
assert_equal expected, aggregation.as_elastic
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Arelastic::Queries::HasParentTest < Minitest::Test
|
4
|
+
def test_as_elastic
|
5
|
+
expected = {"has_parent" => {"parent_type" => "user", "query" => {"query_string" => "foo"}}}
|
6
|
+
|
7
|
+
assert_equal expected, Arelastic::Queries::HasParent.new("user", {"query_string" => "foo"}).as_elastic
|
8
|
+
end
|
9
|
+
end
|
@@ -16,6 +16,36 @@ class Arelastic::Queries::QueryTest < Minitest::Test
|
|
16
16
|
assert_equal(expected, nested_query.as_elastic)
|
17
17
|
end
|
18
18
|
|
19
|
+
def test_has_child
|
20
|
+
query = Arelastic::Queries::Term.new('foo', 'bar')
|
21
|
+
|
22
|
+
nested_query = query.has_child 'links'
|
23
|
+
|
24
|
+
assert nested_query.is_a?(Arelastic::Queries::HasChild)
|
25
|
+
expected = {
|
26
|
+
"has_child" => {
|
27
|
+
"type" => "links",
|
28
|
+
"query" => query.as_elastic
|
29
|
+
}
|
30
|
+
}
|
31
|
+
assert_equal(expected, nested_query.as_elastic)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_has_parent
|
35
|
+
query = Arelastic::Queries::Term.new('foo', 'bar')
|
36
|
+
|
37
|
+
nested_query = query.has_parent 'links'
|
38
|
+
|
39
|
+
assert nested_query.is_a?(Arelastic::Queries::HasParent)
|
40
|
+
expected = {
|
41
|
+
"has_parent" => {
|
42
|
+
"parent_type" => "links",
|
43
|
+
"query" => query.as_elastic
|
44
|
+
}
|
45
|
+
}
|
46
|
+
assert_equal(expected, nested_query.as_elastic)
|
47
|
+
end
|
48
|
+
|
19
49
|
def test_negate
|
20
50
|
filter = Arelastic::Queries::Term.new 'foo', 'bar'
|
21
51
|
|
data/test/helper.rb
CHANGED
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.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Higgins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Build Elastic Search queries with objects
|
14
14
|
email: developer@matthewhiggins.com
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- lib/arelastic/aggregations/range.rb
|
36
36
|
- lib/arelastic/aggregations/reverse_nested.rb
|
37
37
|
- lib/arelastic/aggregations/sampler.rb
|
38
|
+
- lib/arelastic/aggregations/sum.rb
|
38
39
|
- lib/arelastic/aggregations/terms.rb
|
39
40
|
- lib/arelastic/aggregations/value_count.rb
|
40
41
|
- lib/arelastic/arities.rb
|
@@ -71,6 +72,7 @@ files:
|
|
71
72
|
- lib/arelastic/queries/geo_distance.rb
|
72
73
|
- lib/arelastic/queries/geo_polygon.rb
|
73
74
|
- lib/arelastic/queries/has_child.rb
|
75
|
+
- lib/arelastic/queries/has_parent.rb
|
74
76
|
- lib/arelastic/queries/ids.rb
|
75
77
|
- lib/arelastic/queries/limit.rb
|
76
78
|
- lib/arelastic/queries/match.rb
|
@@ -115,6 +117,7 @@ files:
|
|
115
117
|
- test/arelastic/aggregations/range_test.rb
|
116
118
|
- test/arelastic/aggregations/reverse_nested_test.rb
|
117
119
|
- test/arelastic/aggregations/sampler_test.rb
|
120
|
+
- test/arelastic/aggregations/sum_test.rb
|
118
121
|
- test/arelastic/aggregations/terms_test.rb
|
119
122
|
- test/arelastic/arities/binary_test.rb
|
120
123
|
- test/arelastic/arities/polyadic_test.rb
|
@@ -136,6 +139,7 @@ files:
|
|
136
139
|
- test/arelastic/queries/geo_distance_test.rb
|
137
140
|
- test/arelastic/queries/geo_polygon_test.rb
|
138
141
|
- test/arelastic/queries/has_child_test.rb
|
142
|
+
- test/arelastic/queries/has_parent_test.rb
|
139
143
|
- test/arelastic/queries/ids_test.rb
|
140
144
|
- test/arelastic/queries/match_all_test.rb
|
141
145
|
- test/arelastic/queries/match_none_test.rb
|
@@ -175,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
179
|
- !ruby/object:Gem::Version
|
176
180
|
version: '0'
|
177
181
|
requirements: []
|
178
|
-
rubygems_version: 3.
|
182
|
+
rubygems_version: 3.3.6
|
179
183
|
signing_key:
|
180
184
|
specification_version: 4
|
181
185
|
summary: Elastic Search query builder
|