elasticated 3.0.1 → 3.1.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/lib/elasticated.rb +4 -0
- data/lib/elasticated/client.rb +5 -1
- data/lib/elasticated/mapping/fields/analyzed_string_field.rb +21 -0
- data/lib/elasticated/mapping/fields/field_with_doc_values.rb +53 -0
- data/lib/elasticated/mapping/fields/standard_field.rb +33 -0
- data/lib/elasticated/mapping/fields/string_field.rb +19 -0
- data/lib/elasticated/mapping/fields_builder.rb +18 -81
- data/lib/elasticated/query.rb +12 -5
- data/lib/version.rb +5 -1
- data/spec/query_spec.rb +20 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a47e721c1c8eb8f59dc62b3a1f666575b41801e
|
4
|
+
data.tar.gz: a44094026309e9c0c6cf170fe96e350a8e8e598a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adf36208fb4bb439827571bc93e148257f1fd567d7b1d88e080651c5f1492d86392e228f2b82654b1091b7d0b9c264ca469dac66984e2c68234a031af820d39e
|
7
|
+
data.tar.gz: 212bba862b890669e652710ab854aa8a1a9951018b7d27bfc8c64e66e73fec4e903c36aa0247cc032bedc44ff2cfba939742858a83a9ea5acd889e673a8ed8cf
|
data/lib/elasticated.rb
CHANGED
@@ -117,6 +117,10 @@ require_relative 'elasticated/mapping/object_builder'
|
|
117
117
|
require_relative 'elasticated/mapping/nested_builder'
|
118
118
|
require_relative 'elasticated/mapping/type_builder'
|
119
119
|
require_relative 'elasticated/mapping/builder'
|
120
|
+
require_relative 'elasticated/mapping/fields/standard_field'
|
121
|
+
require_relative 'elasticated/mapping/fields/field_with_doc_values'
|
122
|
+
require_relative 'elasticated/mapping/fields/string_field'
|
123
|
+
require_relative 'elasticated/mapping/fields/analyzed_string_field'
|
120
124
|
|
121
125
|
require_relative 'elasticated/index_selector'
|
122
126
|
require_relative 'elasticated/partitioned_repository'
|
data/lib/elasticated/client.rb
CHANGED
@@ -69,6 +69,10 @@ module Elasticated
|
|
69
69
|
transport.indices.put_mapping opts.merge(index: index_name, type: type_name, body: mapping)
|
70
70
|
end
|
71
71
|
|
72
|
+
def update_settings(index_name, settings_body, opts={})
|
73
|
+
transport.indices.put_settings opts.merge(index: index_name, body: settings_body)
|
74
|
+
end
|
75
|
+
|
72
76
|
def refresh_index(index_name)
|
73
77
|
transport.indices.refresh index: index_name
|
74
78
|
log.debug "Index '#{index_name}' refreshed"
|
@@ -120,7 +124,7 @@ module Elasticated
|
|
120
124
|
end
|
121
125
|
|
122
126
|
def bulk(bulk_body, opts={})
|
123
|
-
log_query :bulk, bulk_body, opts
|
127
|
+
log_query :bulk, bulk_body.to_json, opts
|
124
128
|
transport.bulk opts.merge body: bulk_body
|
125
129
|
end
|
126
130
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Elasticated
|
2
|
+
module Mapping
|
3
|
+
module Fields
|
4
|
+
class AnalyzedStringField < FieldWithDocValues
|
5
|
+
|
6
|
+
def build_body
|
7
|
+
body = { type: type }
|
8
|
+
not_analyzed_string = StringField.new(name, doc_values)
|
9
|
+
body[:fields] = not_analyzed_string.build
|
10
|
+
body[:fields][:analyzed] = { type: :string }
|
11
|
+
body
|
12
|
+
end
|
13
|
+
|
14
|
+
def type
|
15
|
+
:multi_field
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Elasticated
|
2
|
+
module Mapping
|
3
|
+
module Fields
|
4
|
+
class FieldWithDocValues < StandardField
|
5
|
+
|
6
|
+
attr_accessor :doc_values
|
7
|
+
|
8
|
+
def initialize(name, doc_values=true)
|
9
|
+
super(name)
|
10
|
+
self.doc_values = doc_values
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_body
|
14
|
+
body = super
|
15
|
+
body[:fielddata] = { format: :doc_values } if doc_values
|
16
|
+
body
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
class DateField < FieldWithDocValues
|
22
|
+
def type
|
23
|
+
:date
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class IntegerField < FieldWithDocValues
|
28
|
+
def type
|
29
|
+
:integer
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class FloatField < FieldWithDocValues
|
34
|
+
def type
|
35
|
+
:float
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class DoubleField < FieldWithDocValues
|
40
|
+
def type
|
41
|
+
:double
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class LongField < FieldWithDocValues
|
46
|
+
def type
|
47
|
+
:long
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Elasticated
|
2
|
+
module Mapping
|
3
|
+
module Fields
|
4
|
+
class StandardField
|
5
|
+
|
6
|
+
# abstract class
|
7
|
+
# child must implement 'type()'
|
8
|
+
|
9
|
+
attr_accessor :name
|
10
|
+
|
11
|
+
def initialize(name)
|
12
|
+
self.name = name
|
13
|
+
end
|
14
|
+
|
15
|
+
def build
|
16
|
+
{ name => build_body }
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_body
|
20
|
+
{ type: type }
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
class BooleanField < StandardField
|
26
|
+
def type
|
27
|
+
:boolean
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -4,50 +4,51 @@ module Elasticated
|
|
4
4
|
|
5
5
|
include Mixins::BlockEvaluation
|
6
6
|
|
7
|
-
attr_accessor :
|
7
|
+
attr_accessor :name, :sub_objects, :nesteds, :fields
|
8
8
|
|
9
9
|
def initialize(name)
|
10
|
-
self.
|
10
|
+
self.fields = Array.new
|
11
11
|
self.sub_objects = Array.new
|
12
12
|
self.nesteds = Array.new
|
13
13
|
self.name = name
|
14
14
|
end
|
15
15
|
|
16
|
-
def add_property(
|
17
|
-
|
16
|
+
def add_property(field)
|
17
|
+
fields << field
|
18
18
|
end
|
19
19
|
|
20
20
|
def date(field_name)
|
21
|
-
add_property field_name
|
21
|
+
add_property Fields::DateField.new(field_name)
|
22
22
|
end
|
23
23
|
|
24
24
|
def string(field_name)
|
25
|
-
add_property field_name
|
25
|
+
add_property Fields::StringField.new(field_name)
|
26
26
|
end
|
27
27
|
|
28
28
|
def float(field_name)
|
29
|
-
add_property field_name
|
29
|
+
add_property Fields::FloatField.new(field_name)
|
30
30
|
end
|
31
31
|
|
32
32
|
def double(field_name)
|
33
|
-
add_property field_name
|
33
|
+
add_property Fields::DoubleField.new(field_name)
|
34
34
|
end
|
35
35
|
|
36
36
|
def integer(field_name)
|
37
|
-
add_property field_name
|
37
|
+
add_property Fields::IntegerField.new(field_name)
|
38
38
|
end
|
39
39
|
|
40
40
|
def long(field_name)
|
41
|
-
add_property field_name
|
41
|
+
add_property Fields::LongField.new(field_name)
|
42
42
|
end
|
43
43
|
|
44
44
|
def analyzed_string(field_name)
|
45
|
-
add_property
|
45
|
+
add_property Fields::AnalyzedStringField.new(field_name)
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
add_property field_name
|
48
|
+
def boolean(field_name)
|
49
|
+
add_property Fields::BooleanField.new(field_name)
|
50
50
|
end
|
51
|
+
alias_method :bool, :boolean
|
51
52
|
|
52
53
|
def object(object_name, &block)
|
53
54
|
sub_object = ObjectBuilder.new object_name
|
@@ -66,7 +67,10 @@ module Elasticated
|
|
66
67
|
end
|
67
68
|
|
68
69
|
def build_body
|
69
|
-
ret =
|
70
|
+
ret = Hash.new
|
71
|
+
fields.each do |field|
|
72
|
+
ret.merge! field.build
|
73
|
+
end
|
70
74
|
sub_objects.each do |sub_object|
|
71
75
|
ret.merge! sub_object.build
|
72
76
|
end
|
@@ -80,73 +84,6 @@ module Elasticated
|
|
80
84
|
{ name => build_body }
|
81
85
|
end
|
82
86
|
|
83
|
-
private
|
84
|
-
|
85
|
-
def build_date_field
|
86
|
-
{
|
87
|
-
type: :date,
|
88
|
-
fielddata: { format: :doc_values }
|
89
|
-
}
|
90
|
-
end
|
91
|
-
|
92
|
-
def build_string_field
|
93
|
-
{
|
94
|
-
type: :string,
|
95
|
-
index: :not_analyzed,
|
96
|
-
fielddata: { format: :doc_values }
|
97
|
-
}
|
98
|
-
end
|
99
|
-
|
100
|
-
def build_integer_field
|
101
|
-
{
|
102
|
-
type: :integer,
|
103
|
-
fielddata: { format: :doc_values }
|
104
|
-
}
|
105
|
-
end
|
106
|
-
|
107
|
-
def build_float_field
|
108
|
-
{
|
109
|
-
type: :float,
|
110
|
-
fielddata: { format: :doc_values }
|
111
|
-
}
|
112
|
-
end
|
113
|
-
|
114
|
-
def build_double_field
|
115
|
-
{
|
116
|
-
type: :double,
|
117
|
-
fielddata: { format: :doc_values }
|
118
|
-
}
|
119
|
-
end
|
120
|
-
|
121
|
-
def build_long_field
|
122
|
-
{
|
123
|
-
type: :long,
|
124
|
-
fielddata: { format: :doc_values }
|
125
|
-
}
|
126
|
-
end
|
127
|
-
|
128
|
-
def build_analyzed_string_field(field_name)
|
129
|
-
{
|
130
|
-
type: :multi_field,
|
131
|
-
fields: {
|
132
|
-
field_name => {
|
133
|
-
type: :string,
|
134
|
-
index: :not_analyzed,
|
135
|
-
fielddata: { format: :doc_values }
|
136
|
-
},
|
137
|
-
analyzed: {
|
138
|
-
type: :string
|
139
|
-
}
|
140
|
-
}
|
141
|
-
}
|
142
|
-
end
|
143
|
-
|
144
|
-
def build_bool_field
|
145
|
-
{
|
146
|
-
type: :boolean
|
147
|
-
}
|
148
|
-
end
|
149
|
-
|
150
87
|
end
|
151
88
|
end
|
152
89
|
end
|
data/lib/elasticated/query.rb
CHANGED
@@ -54,16 +54,23 @@ module Elasticated
|
|
54
54
|
end
|
55
55
|
alias_method :offset, :from
|
56
56
|
|
57
|
-
def
|
57
|
+
def custom_sort(custom_hash)
|
58
58
|
self._sort ||= Array.new
|
59
|
-
_sort <<
|
59
|
+
_sort << custom_hash
|
60
60
|
self
|
61
61
|
end
|
62
62
|
|
63
|
+
def sort(field, method=nil)
|
64
|
+
custom_sort(field => { order: method || :asc })
|
65
|
+
end
|
66
|
+
alias_method :sort_by_field, :sort
|
67
|
+
|
68
|
+
def sort_by_script(script_hash)
|
69
|
+
custom_sort(_script: script_hash)
|
70
|
+
end
|
71
|
+
|
63
72
|
def sort_randomly
|
64
|
-
|
65
|
-
_sort << { _script: { script: "Math.random()", type: "number" } }
|
66
|
-
self
|
73
|
+
sort_by_script(script: "Math.random()", type: "number")
|
67
74
|
end
|
68
75
|
|
69
76
|
def source(*fields_array)
|
data/lib/version.rb
CHANGED
data/spec/query_spec.rb
CHANGED
@@ -67,6 +67,16 @@ module Elasticated
|
|
67
67
|
|
68
68
|
describe "the build method (over other fields)" do
|
69
69
|
|
70
|
+
it "should build a 'match_all' query sorted by a custom hash" do
|
71
|
+
my_custom_hash = { any_key: 'any_value' }
|
72
|
+
q.custom_sort(my_custom_hash)
|
73
|
+
expected_result = {
|
74
|
+
query: { match_all: {} },
|
75
|
+
sort: [my_custom_hash]
|
76
|
+
}
|
77
|
+
expect(q.build).to eq expected_result
|
78
|
+
end
|
79
|
+
|
70
80
|
it "should build a 'match_all' query sorted by a single field" do
|
71
81
|
q.sort :field
|
72
82
|
expected_result = {
|
@@ -94,6 +104,16 @@ module Elasticated
|
|
94
104
|
expect(q.build).to eq expected_result
|
95
105
|
end
|
96
106
|
|
107
|
+
it "should build a 'match_all' query sorted by a custom script" do
|
108
|
+
my_script_hash = { script: "my_script", type: "my_type" }
|
109
|
+
q.sort_by_script(my_script_hash)
|
110
|
+
expected_result = {
|
111
|
+
query: { match_all: {} },
|
112
|
+
sort: [ { _script: my_script_hash } ]
|
113
|
+
}
|
114
|
+
expect(q.build).to eq expected_result
|
115
|
+
end
|
116
|
+
|
97
117
|
it "should build a 'match_all' query sorted randomly" do
|
98
118
|
q.sort_randomly
|
99
119
|
expected_result = {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticated
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Fernandez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -212,6 +212,10 @@ files:
|
|
212
212
|
- lib/elasticated/loggers/silent_logger.rb
|
213
213
|
- lib/elasticated/mapping.rb
|
214
214
|
- lib/elasticated/mapping/builder.rb
|
215
|
+
- lib/elasticated/mapping/fields/analyzed_string_field.rb
|
216
|
+
- lib/elasticated/mapping/fields/field_with_doc_values.rb
|
217
|
+
- lib/elasticated/mapping/fields/standard_field.rb
|
218
|
+
- lib/elasticated/mapping/fields/string_field.rb
|
215
219
|
- lib/elasticated/mapping/fields_builder.rb
|
216
220
|
- lib/elasticated/mapping/nested_builder.rb
|
217
221
|
- lib/elasticated/mapping/object_builder.rb
|