es_query_builder 2.0.0 → 2.0.1

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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/aggregations/buckets/date_histogram_aggregation_builder.rb +64 -0
  3. data/lib/aggregations/buckets/date_range_aggregation_builder.rb +25 -0
  4. data/lib/aggregations/buckets/filter_aggregation_builder.rb +30 -0
  5. data/lib/aggregations/buckets/filters_aggregation_builder.rb +32 -0
  6. data/lib/aggregations/buckets/geo_grid_aggregation_builder.rb +50 -0
  7. data/lib/aggregations/buckets/histogram_aggregation_builder.rb +63 -0
  8. data/lib/aggregations/buckets/nested_aggregation_builder.rb +33 -0
  9. data/lib/aggregations/buckets/range_aggregation_builder.rb +25 -0
  10. data/lib/aggregations/buckets/reverse_nested_aggregation_builder.rb +23 -0
  11. data/lib/aggregations/buckets/terms_aggregation_builder.rb +87 -0
  12. data/lib/aggregations/buckets/top_hits_aggregation_builder.rb +78 -0
  13. data/lib/aggregations/helpers/abstract_aggregation_helper.rb +37 -0
  14. data/lib/aggregations/helpers/abstract_range_helper.rb +40 -0
  15. data/lib/aggregations/helpers/aggregation_query_builder_helper.rb +61 -0
  16. data/lib/aggregations/helpers/values_source_aggregation_helper.rb +53 -0
  17. data/lib/aggregations/metrics/avg_aggregation_builder.rb +24 -0
  18. data/lib/aggregations/metrics/max_aggregation_builder.rb +24 -0
  19. data/lib/aggregations/metrics/min_aggregation_builder.rb +24 -0
  20. data/lib/enums/combine_functions.rb +54 -0
  21. data/lib/enums/distance_types.rb +36 -0
  22. data/lib/enums/distance_units.rb +71 -0
  23. data/lib/enums/fuzziness.rb +56 -0
  24. data/lib/enums/orders.rb +17 -0
  25. data/lib/enums/score_modes.rb +54 -0
  26. data/lib/enums/script_sort_types.rb +32 -0
  27. data/lib/enums/script_types.rb +19 -0
  28. data/lib/enums/shape_relations.rb +47 -0
  29. data/lib/enums/sort_modes.rb +59 -0
  30. data/lib/enums/sort_orders.rb +33 -0
  31. data/lib/enums/validation_methods.rb +44 -0
  32. data/lib/enums/zero_terms_query.rb +37 -0
  33. data/lib/function_scores/random_score_function_builder.rb +53 -0
  34. data/lib/function_scores/score_function_builder.rb +19 -0
  35. data/lib/function_scores/script_score_function_builder.rb +30 -0
  36. data/lib/function_scores/weighted_score_function_builder.rb +38 -0
  37. data/lib/misc/bucket_order.rb +33 -0
  38. data/lib/misc/geo_point.rb +64 -0
  39. data/lib/misc/range.rb +44 -0
  40. data/lib/misc/script.rb +62 -0
  41. data/lib/misc/terms_lookup.rb +45 -0
  42. data/lib/queries/abstract_query_builder.rb +31 -0
  43. data/lib/queries/base_query_builder.rb +27 -0
  44. data/lib/queries/bool_query_builder.rb +148 -0
  45. data/lib/queries/constant_score_query_builder.rb +32 -0
  46. data/lib/queries/dis_max_query_builder.rb +70 -0
  47. data/lib/queries/exists_query_builder.rb +32 -0
  48. data/lib/queries/function_score_query_builder.rb +170 -0
  49. data/lib/queries/geo_distance_query_builder.rb +126 -0
  50. data/lib/queries/match_all_query_builder.rb +16 -0
  51. data/lib/queries/match_query_builder.rb +181 -0
  52. data/lib/queries/nested_query_builder.rb +55 -0
  53. data/lib/queries/nested_sort_query_builder.rb +44 -0
  54. data/lib/queries/query_builder.rb +33 -0
  55. data/lib/queries/range_query_builder.rb +153 -0
  56. data/lib/queries/term_query_builder.rb +44 -0
  57. data/lib/queries/terms_query_builder.rb +54 -0
  58. data/lib/sort/abstract_sort_builder.rb +15 -0
  59. data/lib/sort/field_sort_builder.rb +70 -0
  60. data/lib/sort/geo_distance_sort_builder.rb +120 -0
  61. data/lib/sort/nested_sort_builder.rb +68 -0
  62. data/lib/sort/score_sort_builder.rb +16 -0
  63. data/lib/sort/script_sort_builder.rb +83 -0
  64. data/lib/sort/sort_builder.rb +28 -0
  65. metadata +64 -1
@@ -0,0 +1,78 @@
1
+ module Aggregations
2
+ module Buckets
3
+ # Elasticsearch Top Hits Aggregation
4
+ class TopHitsAggregationBuilder
5
+
6
+ include ::Aggregations::Helpers::AbstractAggregationHelper
7
+ include ::Aggregations::Helpers::AggregationQueryBuilderHelper
8
+ include ::AttributesReader
9
+
10
+ ATTRIBUTES = [:size, :sort, :_source]
11
+
12
+ # @param [String] name : Aggregation name
13
+ def initialize name:
14
+ @name = name.intern
15
+ @type = :top_hits
16
+ @query = {
17
+ @name => {
18
+ @type => {}
19
+ }
20
+ }
21
+ end
22
+
23
+ # @param [Integer] size
24
+ # @return [TopHitsAggregationBuilder]
25
+ def size size
26
+ @size = size
27
+ self
28
+ end
29
+
30
+ # @return [Integer]
31
+ def size_expr
32
+ @size
33
+ end
34
+
35
+ # @param [Sort::SortBuilder] sort : use SortBuilders factory
36
+ # @return [TopHitsAggregationBuilder]
37
+ def add_sort sort
38
+ @sort ||= []
39
+ @sort << sort
40
+ self
41
+ end
42
+
43
+ # @return [Sort::SortBuilder]
44
+ def sort_expr
45
+ @sort
46
+ end
47
+
48
+ # @param [Array] include_list
49
+ # @return [TopHitsAggregationBuilder]
50
+ def source_include include_list
51
+ @_source ||= {}
52
+ @_source[:include] = include_list if include_list.present?
53
+ self
54
+ end
55
+
56
+ # @param [Array] exclude_list
57
+ # @return [TopHitsAggregationBuilder]
58
+ def source_exclude exclude_list
59
+ @_source ||= {}
60
+ @_source[:exclude] = exclude_list if exclude_list.present?
61
+ self
62
+ end
63
+
64
+ # @return [Array]
65
+ def source_include_expr
66
+ return [] unless @_source.present?
67
+ @_source[:include]
68
+ end
69
+
70
+ # @return [Array]
71
+ def source_exclude_expr
72
+ return [] unless @_source.present?
73
+ @_source[:exclude]
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aggregations
4
+ module Helpers
5
+ # A helper module for aggregations, defines sub aggregation attributes.
6
+ module AbstractAggregationHelper
7
+ # helper method to add abstract aggregation attributes to aggregation.
8
+ def abstract_agg_builder
9
+ builder = {}
10
+ builder[:aggs] = build_sub_aggs_struct if @sub_aggregations.present?
11
+ builder
12
+ end
13
+
14
+ # @param [AggregationQueryBuilderHelper] sub_agg : AggregationBuilders factory
15
+ # @return [AbstractAggregationHelper] : aggregation object
16
+ def sub_aggregation(sub_agg)
17
+ @sub_aggregations = [] if @sub_aggregations.nil?
18
+ @sub_aggregations = @sub_aggregations.append(sub_agg)
19
+ self
20
+ end
21
+
22
+ # @return [AbstractAggregationHelper] : aggregation object
23
+ def sub_aggregation_expr
24
+ @sub_aggregations
25
+ end
26
+
27
+ private
28
+
29
+ def build_sub_aggs_struct
30
+ @sub_aggregations.each_with_object({}) do |ag, qr|
31
+ qr.merge!(ag.attributes.query)
32
+ qr
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,40 @@
1
+ # A helper module for aggregations, defines ranges, keyed attributes.
2
+ module Aggregations
3
+ module Helpers
4
+ module AbstractRangeHelper
5
+
6
+ # helper method to add abstract range attributes to aggregation.
7
+ def abstract_range_builder
8
+ builder = {}
9
+ builder[:ranges] = @ranges if @ranges.present?
10
+ builder[:keyed] = @keyed if @keyed.present?
11
+ builder
12
+ end
13
+
14
+ # @param [Misc::Range] range
15
+ # @return [AbstractRangeHelper], can be chained for adding multiple ranges.
16
+ def add_range range
17
+ @ranges ||= []
18
+ @ranges << range.settings
19
+ self
20
+ end
21
+
22
+ # @return [Array]
23
+ def ranges_expr
24
+ @ranges
25
+ end
26
+
27
+ # @param [Boolean] keyed
28
+ def keyed keyed
29
+ @keyed = keyed
30
+ self
31
+ end
32
+
33
+ # @return [Boolean]
34
+ def keyed_expr
35
+ @keyed
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,61 @@
1
+ # A helper module for aggregations, builds aggregation query from attributes.
2
+ module Aggregations
3
+ module Helpers
4
+ module AggregationQueryBuilderHelper
5
+
6
+ OBJECT_ARRAY_SETTINGS_FIELDS = [:order]
7
+ OBJECT_ARRAY_QUERY_FIELDS = [:sort]
8
+
9
+ # @return [String] : Aggregation name
10
+ def name_expr
11
+ @name.to_s
12
+ end
13
+
14
+ # @return [String] : Aggregation type
15
+ def type_expr
16
+ @type.to_s
17
+ end
18
+
19
+ # @return [Hash] : Aggregation query
20
+ def query
21
+ add_value_source_agg_builder if self.class.included_modules.include?(ValuesSourceAggregationHelper)
22
+ add_abstract_agg_builder if self.class.included_modules.include?(AbstractAggregationHelper)
23
+ add_abstract_range_builder if self.class.included_modules.include?(AbstractRangeHelper)
24
+ add_class_attributes if ("#{self.class.name}::ATTRIBUTES".constantize rescue nil).present?
25
+ @query
26
+ end
27
+
28
+ alias_method :query_expr, :query
29
+
30
+ private
31
+
32
+ def add_value_source_agg_builder
33
+ @query[@name][@type].merge!(value_source_agg_builder)
34
+ end
35
+
36
+ def add_class_attributes
37
+ "#{self.class.name}::ATTRIBUTES".constantize.each do |attr|
38
+ attr_inst = instance_variable_get("@#{attr.to_s}")
39
+ if attr_inst.present?
40
+ if OBJECT_ARRAY_SETTINGS_FIELDS.include?(attr)
41
+ @query[@name][@type][attr] = attr_inst.map{|obj| obj.settings}
42
+ elsif OBJECT_ARRAY_QUERY_FIELDS.include?(attr)
43
+ @query[@name][@type][attr] = attr_inst.map{|obj| obj.query}
44
+ else
45
+ @query[@name][@type][attr] = attr_inst
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ def add_abstract_agg_builder
52
+ @query[@name].merge!(abstract_agg_builder)
53
+ end
54
+
55
+ def add_abstract_range_builder
56
+ @query[@name][@type].merge!(abstract_range_builder)
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,53 @@
1
+ # A helper module for aggregations, defines field, script, missing attributes.
2
+ module Aggregations
3
+ module Helpers
4
+ module ValuesSourceAggregationHelper
5
+
6
+ # helper method to add values source attributes to aggregation.
7
+ def value_source_agg_builder
8
+ builder = {}
9
+ builder[:field] = @field if @field.present?
10
+ builder[:script] = @script.settings if @script.present?
11
+ builder[:missing] = @missing if @missing.present?
12
+ builder
13
+ end
14
+
15
+ # @param [String] field
16
+ # @return [ValuesSourceAggregationHelper]
17
+ def field field
18
+ @field = field
19
+ self
20
+ end
21
+
22
+ # @return [String]
23
+ def field_expr
24
+ @field
25
+ end
26
+
27
+ # @param [Misc::Script] script
28
+ # @return [ValuesSourceAggregationHelper]
29
+ def script script
30
+ @script = script
31
+ self
32
+ end
33
+
34
+ # @return [Misc::Script]
35
+ def script_expr
36
+ @script
37
+ end
38
+
39
+ # @param [String]
40
+ # @return [ValuesSourceAggregationHelper]
41
+ def missing missing
42
+ @missing = missing
43
+ self
44
+ end
45
+
46
+ # @return [String]
47
+ def missing_expr
48
+ @missing
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,24 @@
1
+ module Aggregations
2
+ module Metrics
3
+ # Elasticsearch Avg Aggregation
4
+ class AvgAggregationBuilder
5
+
6
+ include ::Aggregations::Helpers::ValuesSourceAggregationHelper
7
+ include ::Aggregations::Helpers::AbstractAggregationHelper
8
+ include ::Aggregations::Helpers::AggregationQueryBuilderHelper
9
+ include ::AttributesReader
10
+
11
+ # @param [String] name : Aggregation name
12
+ def initialize name:
13
+ @name = name.intern
14
+ @type = :avg
15
+ @query = {
16
+ @name => {
17
+ @type => {}
18
+ }
19
+ }
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module Aggregations
2
+ module Metrics
3
+ # Elasticsearch Max Aggregation
4
+ class MaxAggregationBuilder
5
+
6
+ include ::Aggregations::Helpers::ValuesSourceAggregationHelper
7
+ include ::Aggregations::Helpers::AbstractAggregationHelper
8
+ include ::Aggregations::Helpers::AggregationQueryBuilderHelper
9
+ include ::AttributesReader
10
+
11
+ # @param [String] name : Aggregation name
12
+ def initialize name:
13
+ @name = name.intern
14
+ @type = :max
15
+ @query = {
16
+ @name => {
17
+ @type => {}
18
+ }
19
+ }
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module Aggregations
2
+ module Metrics
3
+ # Elasticsearch Min Aggregation
4
+ class MinAggregationBuilder
5
+
6
+ include ::Aggregations::Helpers::ValuesSourceAggregationHelper
7
+ include ::Aggregations::Helpers::AbstractAggregationHelper
8
+ include ::Aggregations::Helpers::AggregationQueryBuilderHelper
9
+ include ::AttributesReader
10
+
11
+ # @param [String] name : Aggregation name
12
+ def initialize name:
13
+ @name = name.intern
14
+ @type = :min
15
+ @query = {
16
+ @name => {
17
+ @type => {}
18
+ }
19
+ }
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enums
4
+ # Enumerator class for boost modes while combining aggregated function
5
+ # scores together with the sub query score
6
+ class CombineFunctions
7
+ # @!visibility protected
8
+ COMBINE_FUNCTIONS = { multiply: 'multiply', replace: 'replace', sum: 'sum',
9
+ avg: 'avg', max: 'max', min: 'min' }.freeze
10
+ # @!visibility protected
11
+ attr_reader :combine_function
12
+
13
+ COMBINE_FUNCTIONS.each do |comb_fnctn, es_value|
14
+ define_singleton_method(comb_fnctn) do
15
+ return new(es_value)
16
+ end
17
+ end
18
+
19
+ # @!scope class
20
+ # @!method multiply
21
+ # @return [CombineFunctions] CombineFunctions object
22
+ # corresponding to elasticsearch option of 'multiply'
23
+
24
+ # @!scope class
25
+ # @!method replace
26
+ # @return [CombineFunctions] CombineFunctions object
27
+ # corresponding to elasticsearch option of 'replace'
28
+
29
+ # @!scope class
30
+ # @!method sum
31
+ # @return [CombineFunctions] CombineFunctions object
32
+ # corresponding to elasticsearch option of 'sum'
33
+
34
+ # @!scope class
35
+ # @!method avg
36
+ # @return [CombineFunctions] CombineFunctions object
37
+ # corresponding to elasticsearch option of 'avg'
38
+
39
+ # @!scope class
40
+ # @!method max
41
+ # @return [CombineFunctions] CombineFunctions object
42
+ # corresponding to elasticsearch option of 'max'
43
+
44
+ # @!scope class
45
+ # @!method min
46
+ # @return [CombineFunctions] CombineFunctions object
47
+ # corresponding to elasticsearch option of 'min'
48
+
49
+ # @!visibility protected
50
+ def initialize(combine_function)
51
+ @combine_function = combine_function
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enums
4
+ # Enumerator class for type of measurement of geo distance.
5
+ class DistanceTypes
6
+ # @!visibility protected
7
+ DISTANCE_TYPES = { arc: 'arc', plane: 'plane' }.freeze
8
+
9
+ # @!visibility protected
10
+ attr_reader :distance_type
11
+
12
+ # @!visibility protected
13
+ DISTANCE_TYPES.each do |distn_type, es_value|
14
+ define_singleton_method(distn_type) do
15
+ return new(es_value)
16
+ end
17
+ end
18
+
19
+ # @!scope class
20
+ # @!method arc
21
+ # default type
22
+ # @return [DistanceTypes] DistanceTypes object
23
+ # corresponding to elasticsearch option of 'arc'
24
+
25
+ # @!scope class
26
+ # @!method plane
27
+ # faster, but inaccurate on long distances and close to the poles
28
+ # @return [DistanceTypes] DistanceTypes object
29
+ # corresponding to elasticsearch option of 'plane'
30
+
31
+ # @!visibility protected
32
+ def initialize(distn_type)
33
+ @distance_type = distn_type
34
+ end
35
+ end
36
+ end