elasticated 3.0.1 → 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/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
|