elasticsearch-dsl 0.1.2 → 0.1.3
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 +26 -11
- data/lib/elasticsearch/dsl/search/aggregation.rb +1 -1
- data/lib/elasticsearch/dsl/search/aggregations/global.rb +7 -3
- data/lib/elasticsearch/dsl/search/aggregations/stats.rb +15 -2
- data/lib/elasticsearch/dsl/search/aggregations/terms.rb +12 -2
- data/lib/elasticsearch/dsl/version.rb +1 -1
- data/test/integration/search_aggregation_geo_test.rb +1 -1
- data/test/integration/search_aggregations_test.rb +24 -1
- data/test/unit/aggregations/global_test.rb +19 -1
- data/test/unit/aggregations/stats_test.rb +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2037d3abda2b5b40dab3cd2618751d20c0fcc06
|
4
|
+
data.tar.gz: b31c3b77ac4628ea87e96f85b9e06b2f8a592b91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c7b217d8851ccb1f90263a48f05dff3517dca17d57296acbb750d2fd5232f35c7ed8f6cd5e060e6a30eb93937975c03c04dacd85006ca9fbe9827478471fab8
|
7
|
+
data.tar.gz: 1c8efb817f44b4ce94d08c56aaa43b4eb74b6a348e2b55582d70a3325f437271a1bb602c7fec4a5d0e4124ab3d2987fb2176b9aa34ad95c4ed1f8b9f37f76c28
|
data/README.md
CHANGED
@@ -108,7 +108,11 @@ All Elasticsearch DSL features are supported, namely:
|
|
108
108
|
* [Pagination](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html)
|
109
109
|
* [Options](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-body.html) (source filtering, highlighting, etc)
|
110
110
|
|
111
|
-
An example of a complex search definition
|
111
|
+
An example of a complex search definition is below.
|
112
|
+
|
113
|
+
**NOTE:** In order to run the example, you have to allow restoring from the `data.elasticsearch.org`
|
114
|
+
repository by adding this configuration to your `elasticsearch.yml`:
|
115
|
+
`repositories.url.allowed_urls: ["https://s3.amazonaws.com/data.elasticsearch.org/*"]`
|
112
116
|
|
113
117
|
```ruby
|
114
118
|
require 'awesome_print'
|
@@ -120,18 +124,17 @@ include Elasticsearch::DSL
|
|
120
124
|
|
121
125
|
client = Elasticsearch::Client.new transport_options: { request: { timeout: 3600, open_timeout: 3600 } }
|
122
126
|
|
123
|
-
|
124
|
-
|
127
|
+
puts "Recovering the 'bicycles.stackexchange.com' index...".yellow
|
128
|
+
|
125
129
|
client.indices.delete index: 'bicycles.stackexchange.com', ignore: 404
|
126
130
|
|
127
|
-
puts "Recovering the 'bicycles.stackexchange.com' index...".gray
|
128
131
|
client.snapshot.create_repository repository: 'data.elasticsearch.org', body: { type: 'url', settings: { url: 'https://s3.amazonaws.com/data.elasticsearch.org/bicycles.stackexchange.com/' } }
|
129
132
|
client.snapshot.restore repository: 'data.elasticsearch.org', snapshot: 'bicycles.stackexchange.com', body: { indices: 'bicycles.stackexchange.com' }
|
130
133
|
until client.cluster.health(level: 'indices')['indices']['bicycles.stackexchange.com']['status'] == 'green'
|
131
|
-
r = client.indices.
|
132
|
-
print "\r#{r['index']['size']} of #{r['
|
134
|
+
r = client.indices.recovery(index: 'bicycles.stackexchange.com', human: true)['bicycles.stackexchange.com']['shards'][0] rescue nil
|
135
|
+
print "\r#{r['index']['size']['recovered'] rescue '0b'} of #{r['index']['size']['total'] rescue 'N/A'}".ljust(52).gray
|
133
136
|
sleep 1
|
134
|
-
end
|
137
|
+
end; puts
|
135
138
|
|
136
139
|
# The search definition
|
137
140
|
#
|
@@ -164,9 +167,9 @@ definition = search {
|
|
164
167
|
end
|
165
168
|
end
|
166
169
|
|
167
|
-
# Multiply the default `_score` by
|
170
|
+
# Multiply the default `_score` by the document rating
|
168
171
|
#
|
169
|
-
functions << { script_score: { script: '_score *
|
172
|
+
functions << { script_score: { script: '_score * doc["rating"].value' } }
|
170
173
|
end
|
171
174
|
end
|
172
175
|
|
@@ -175,6 +178,12 @@ definition = search {
|
|
175
178
|
aggregation :tags do
|
176
179
|
terms do
|
177
180
|
field 'tags'
|
181
|
+
|
182
|
+
# Calculate average view count per tag (inner aggregation)
|
183
|
+
#
|
184
|
+
aggregation :avg_view_count do
|
185
|
+
avg field: 'view_count'
|
186
|
+
end
|
178
187
|
end
|
179
188
|
end
|
180
189
|
|
@@ -185,6 +194,12 @@ definition = search {
|
|
185
194
|
field 'creation_date'
|
186
195
|
interval 'month'
|
187
196
|
format 'yyyy-MM'
|
197
|
+
|
198
|
+
# Calculate the statistics on comment count per day (inner aggregation)
|
199
|
+
#
|
200
|
+
aggregation :comments do
|
201
|
+
stats field: 'comment_count'
|
202
|
+
end
|
188
203
|
end
|
189
204
|
end
|
190
205
|
|
@@ -206,14 +221,14 @@ definition = search {
|
|
206
221
|
source ['title', 'tags', 'creation_date', 'rating', 'user.location', 'user.display_name']
|
207
222
|
}
|
208
223
|
|
209
|
-
puts "Search definition #{'-'*63}\n".
|
224
|
+
puts "Search definition #{'-'*63}\n".yellow
|
210
225
|
ap definition.to_hash
|
211
226
|
|
212
227
|
# Execute the search request
|
213
228
|
#
|
214
229
|
response = client.search index: 'bicycles.stackexchange.com', type: ['question','answer'], body: definition
|
215
230
|
|
216
|
-
puts "\nSearch results #{'-'*66}\n".
|
231
|
+
puts "\nSearch results #{'-'*66}\n".yellow
|
217
232
|
ap response
|
218
233
|
```
|
219
234
|
|
@@ -9,14 +9,18 @@ module Elasticsearch
|
|
9
9
|
#
|
10
10
|
# search do
|
11
11
|
# aggregation :all_documents do
|
12
|
-
# global
|
12
|
+
# global do
|
13
|
+
# aggregation :avg_clicks do
|
14
|
+
# avg field: 'clicks'
|
15
|
+
# end
|
16
|
+
# end
|
13
17
|
# end
|
14
18
|
# end
|
15
19
|
#
|
16
|
-
# @see
|
20
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-global-aggregation.html
|
17
21
|
#
|
18
22
|
class Global
|
19
|
-
include
|
23
|
+
include BaseAggregationComponent
|
20
24
|
end
|
21
25
|
|
22
26
|
end
|
@@ -5,7 +5,7 @@ module Elasticsearch
|
|
5
5
|
|
6
6
|
# A multi-value metrics aggregation which returns statistical information on numeric values
|
7
7
|
#
|
8
|
-
# @example
|
8
|
+
# @example Passing the options as a Hash
|
9
9
|
#
|
10
10
|
# search do
|
11
11
|
# aggregation :clicks_stats do
|
@@ -13,10 +13,23 @@ module Elasticsearch
|
|
13
13
|
# end
|
14
14
|
# end
|
15
15
|
#
|
16
|
-
# @
|
16
|
+
# @example Passing the options as a block
|
17
|
+
#
|
18
|
+
# search do
|
19
|
+
# aggregation :clicks_stats do
|
20
|
+
# stats do
|
21
|
+
# field 'clicks'
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-stats-aggregation.html
|
17
27
|
#
|
18
28
|
class Stats
|
19
29
|
include BaseComponent
|
30
|
+
|
31
|
+
option_method :field
|
32
|
+
option_method :script
|
20
33
|
end
|
21
34
|
|
22
35
|
end
|
@@ -5,13 +5,23 @@ module Elasticsearch
|
|
5
5
|
|
6
6
|
# A multi-bucket aggregation which returns the collection of terms and their document counts
|
7
7
|
#
|
8
|
-
# @example
|
8
|
+
# @example Passing the options as a Hash
|
9
9
|
#
|
10
10
|
# aggregation :tags do
|
11
11
|
# terms field: 'tags'
|
12
12
|
# end
|
13
13
|
#
|
14
|
-
# @
|
14
|
+
# @example Passing the options as a block
|
15
|
+
#
|
16
|
+
# search do
|
17
|
+
# aggregation :tags do
|
18
|
+
# terms do
|
19
|
+
# field 'tags'
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
|
15
25
|
#
|
16
26
|
class Terms
|
17
27
|
include BaseAggregationComponent
|
@@ -36,7 +36,7 @@ module Elasticsearch
|
|
36
36
|
assert_equal 3, response['aggregations']['tags']['value']
|
37
37
|
end
|
38
38
|
|
39
|
-
should "return tag counts per clicks range" do
|
39
|
+
should "return tag counts per clicks range as an inner (nested) aggregation" do
|
40
40
|
response = @client.search index: 'test', body: search {
|
41
41
|
aggregation :clicks do
|
42
42
|
range field: 'clicks' do
|
@@ -95,6 +95,29 @@ module Elasticsearch
|
|
95
95
|
assert_equal 13, response['aggregations']['avg_clicks']['value'].to_i
|
96
96
|
end
|
97
97
|
|
98
|
+
should "define a global aggregation" do
|
99
|
+
response = @client.search index: 'test', body: search {
|
100
|
+
query do
|
101
|
+
filtered filter: { terms: { tags: ['two'] } }
|
102
|
+
end
|
103
|
+
|
104
|
+
aggregation :avg_clicks do
|
105
|
+
avg field: 'clicks'
|
106
|
+
end
|
107
|
+
|
108
|
+
aggregation :all_documents do
|
109
|
+
global do
|
110
|
+
aggregation :avg_clicks do
|
111
|
+
avg field: 'clicks'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
}.to_hash
|
116
|
+
|
117
|
+
assert_equal 15, response['aggregations']['avg_clicks']['value'].to_i
|
118
|
+
assert_equal 13, response['aggregations']['all_documents']['avg_clicks']['value'].to_i
|
119
|
+
end
|
120
|
+
|
98
121
|
should "return statistics on clicks" do
|
99
122
|
response = @client.search index: 'test', body: search {
|
100
123
|
aggregation :stats_clicks do
|
@@ -12,7 +12,25 @@ module Elasticsearch
|
|
12
12
|
should "be converted to a Hash" do
|
13
13
|
assert_equal({ global: {} }, subject.to_hash)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
|
+
should "take a block" do
|
17
|
+
subject = Global.new do
|
18
|
+
end
|
19
|
+
assert_equal({global: {} }, subject.to_hash)
|
20
|
+
end
|
21
|
+
|
22
|
+
should "define aggregations" do
|
23
|
+
subject = Global.new do
|
24
|
+
aggregation :foo do
|
25
|
+
terms field: "bar"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
expected = {
|
29
|
+
aggregations: { foo: { terms: { field: "bar" } } },
|
30
|
+
global: {}
|
31
|
+
}
|
32
|
+
assert_equal(expected, subject.to_hash)
|
33
|
+
end
|
16
34
|
end
|
17
35
|
end
|
18
36
|
end
|
@@ -17,6 +17,14 @@ module Elasticsearch
|
|
17
17
|
subject = Stats.new foo: 'bar'
|
18
18
|
assert_equal({ stats: { foo: 'bar' } }, subject.to_hash)
|
19
19
|
end
|
20
|
+
|
21
|
+
should "take a block" do
|
22
|
+
subject = Stats.new do
|
23
|
+
field 'bar'
|
24
|
+
end
|
25
|
+
|
26
|
+
assert_equal({stats: { field: 'bar' } }, subject.to_hash)
|
27
|
+
end
|
20
28
|
end
|
21
29
|
end
|
22
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticsearch-dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karel Minarik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|