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 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