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.
- checksums.yaml +4 -4
- data/lib/aggregations/buckets/date_histogram_aggregation_builder.rb +64 -0
- data/lib/aggregations/buckets/date_range_aggregation_builder.rb +25 -0
- data/lib/aggregations/buckets/filter_aggregation_builder.rb +30 -0
- data/lib/aggregations/buckets/filters_aggregation_builder.rb +32 -0
- data/lib/aggregations/buckets/geo_grid_aggregation_builder.rb +50 -0
- data/lib/aggregations/buckets/histogram_aggregation_builder.rb +63 -0
- data/lib/aggregations/buckets/nested_aggregation_builder.rb +33 -0
- data/lib/aggregations/buckets/range_aggregation_builder.rb +25 -0
- data/lib/aggregations/buckets/reverse_nested_aggregation_builder.rb +23 -0
- data/lib/aggregations/buckets/terms_aggregation_builder.rb +87 -0
- data/lib/aggregations/buckets/top_hits_aggregation_builder.rb +78 -0
- data/lib/aggregations/helpers/abstract_aggregation_helper.rb +37 -0
- data/lib/aggregations/helpers/abstract_range_helper.rb +40 -0
- data/lib/aggregations/helpers/aggregation_query_builder_helper.rb +61 -0
- data/lib/aggregations/helpers/values_source_aggregation_helper.rb +53 -0
- data/lib/aggregations/metrics/avg_aggregation_builder.rb +24 -0
- data/lib/aggregations/metrics/max_aggregation_builder.rb +24 -0
- data/lib/aggregations/metrics/min_aggregation_builder.rb +24 -0
- data/lib/enums/combine_functions.rb +54 -0
- data/lib/enums/distance_types.rb +36 -0
- data/lib/enums/distance_units.rb +71 -0
- data/lib/enums/fuzziness.rb +56 -0
- data/lib/enums/orders.rb +17 -0
- data/lib/enums/score_modes.rb +54 -0
- data/lib/enums/script_sort_types.rb +32 -0
- data/lib/enums/script_types.rb +19 -0
- data/lib/enums/shape_relations.rb +47 -0
- data/lib/enums/sort_modes.rb +59 -0
- data/lib/enums/sort_orders.rb +33 -0
- data/lib/enums/validation_methods.rb +44 -0
- data/lib/enums/zero_terms_query.rb +37 -0
- data/lib/function_scores/random_score_function_builder.rb +53 -0
- data/lib/function_scores/score_function_builder.rb +19 -0
- data/lib/function_scores/script_score_function_builder.rb +30 -0
- data/lib/function_scores/weighted_score_function_builder.rb +38 -0
- data/lib/misc/bucket_order.rb +33 -0
- data/lib/misc/geo_point.rb +64 -0
- data/lib/misc/range.rb +44 -0
- data/lib/misc/script.rb +62 -0
- data/lib/misc/terms_lookup.rb +45 -0
- data/lib/queries/abstract_query_builder.rb +31 -0
- data/lib/queries/base_query_builder.rb +27 -0
- data/lib/queries/bool_query_builder.rb +148 -0
- data/lib/queries/constant_score_query_builder.rb +32 -0
- data/lib/queries/dis_max_query_builder.rb +70 -0
- data/lib/queries/exists_query_builder.rb +32 -0
- data/lib/queries/function_score_query_builder.rb +170 -0
- data/lib/queries/geo_distance_query_builder.rb +126 -0
- data/lib/queries/match_all_query_builder.rb +16 -0
- data/lib/queries/match_query_builder.rb +181 -0
- data/lib/queries/nested_query_builder.rb +55 -0
- data/lib/queries/nested_sort_query_builder.rb +44 -0
- data/lib/queries/query_builder.rb +33 -0
- data/lib/queries/range_query_builder.rb +153 -0
- data/lib/queries/term_query_builder.rb +44 -0
- data/lib/queries/terms_query_builder.rb +54 -0
- data/lib/sort/abstract_sort_builder.rb +15 -0
- data/lib/sort/field_sort_builder.rb +70 -0
- data/lib/sort/geo_distance_sort_builder.rb +120 -0
- data/lib/sort/nested_sort_builder.rb +68 -0
- data/lib/sort/score_sort_builder.rb +16 -0
- data/lib/sort/script_sort_builder.rb +83 -0
- data/lib/sort/sort_builder.rb +28 -0
- 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
|