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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cdd5d2086175d504907b22b0b152d8adffa9e13b
4
- data.tar.gz: 9db1e94f8ec716696ae2bb15cd1a3aa9878a030a
3
+ metadata.gz: 7a47e721c1c8eb8f59dc62b3a1f666575b41801e
4
+ data.tar.gz: a44094026309e9c0c6cf170fe96e350a8e8e598a
5
5
  SHA512:
6
- metadata.gz: f24bf04a0195e2e0d5db22df845cfd4f4506c53e72a4878a2b72cfea06b92da6d92f0455c449240708838e59bad2f3b68a2b5f7d7714e39f4cc5da1d0579f94f
7
- data.tar.gz: da184d8c17afa3675989cfb244eb047ad4d8e14f24d9f23db2892f536784908607430071b6404fe13bba79ffc32ab8743b35320ed47d90f01c2d2c7be1a66fd5
6
+ metadata.gz: adf36208fb4bb439827571bc93e148257f1fd567d7b1d88e080651c5f1492d86392e228f2b82654b1091b7d0b9c264ca469dac66984e2c68234a031af820d39e
7
+ data.tar.gz: 212bba862b890669e652710ab854aa8a1a9951018b7d27bfc8c64e66e73fec4e903c36aa0247cc032bedc44ff2cfba939742858a83a9ea5acd889e673a8ed8cf
@@ -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'
@@ -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
@@ -0,0 +1,19 @@
1
+ module Elasticated
2
+ module Mapping
3
+ module Fields
4
+ class StringField < FieldWithDocValues
5
+
6
+ def build_body
7
+ body = super
8
+ body[:index] = :not_analyzed
9
+ body
10
+ end
11
+
12
+ def type
13
+ :string
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -4,50 +4,51 @@ module Elasticated
4
4
 
5
5
  include Mixins::BlockEvaluation
6
6
 
7
- attr_accessor :hash, :name, :sub_objects, :nesteds
7
+ attr_accessor :name, :sub_objects, :nesteds, :fields
8
8
 
9
9
  def initialize(name)
10
- self.hash = Hash.new
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(name, value)
17
- hash[name] = value
16
+ def add_property(field)
17
+ fields << field
18
18
  end
19
19
 
20
20
  def date(field_name)
21
- add_property field_name, build_date_field
21
+ add_property Fields::DateField.new(field_name)
22
22
  end
23
23
 
24
24
  def string(field_name)
25
- add_property field_name, build_string_field
25
+ add_property Fields::StringField.new(field_name)
26
26
  end
27
27
 
28
28
  def float(field_name)
29
- add_property field_name, build_float_field
29
+ add_property Fields::FloatField.new(field_name)
30
30
  end
31
31
 
32
32
  def double(field_name)
33
- add_property field_name, build_double_field
33
+ add_property Fields::DoubleField.new(field_name)
34
34
  end
35
35
 
36
36
  def integer(field_name)
37
- add_property field_name, build_integer_field
37
+ add_property Fields::IntegerField.new(field_name)
38
38
  end
39
39
 
40
40
  def long(field_name)
41
- add_property field_name, build_long_field
41
+ add_property Fields::LongField.new(field_name)
42
42
  end
43
43
 
44
44
  def analyzed_string(field_name)
45
- add_property field_name, build_analyzed_string_field(field_name)
45
+ add_property Fields::AnalyzedStringField.new(field_name)
46
46
  end
47
47
 
48
- def bool(field_name)
49
- add_property field_name, build_bool_field
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 = hash
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
@@ -54,16 +54,23 @@ module Elasticated
54
54
  end
55
55
  alias_method :offset, :from
56
56
 
57
- def sort(field, method=nil)
57
+ def custom_sort(custom_hash)
58
58
  self._sort ||= Array.new
59
- _sort << { field => { order: method || :asc } }
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
- self._sort ||= Array.new
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)
@@ -1,9 +1,13 @@
1
1
  module Elasticated
2
- VERSION = '3.0.1'
2
+ VERSION = '3.1.0'
3
3
  end
4
4
 
5
5
  # Changelog
6
6
 
7
+ # 3.1.0
8
+
9
+ # El Client puede actualizar settings de un indice particular
10
+
7
11
  # 3.0.1
8
12
 
9
13
  # Cambios introducidos en 2.3.0
@@ -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.1
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-03-30 00:00:00.000000000 Z
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