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,126 @@
1
+ # Filters documents that include only hits that exists within a specific distance from a geo point.
2
+ require_relative 'query_builder'
3
+ module Queries
4
+ class GeoDistanceQueryBuilder < QueryBuilder
5
+
6
+ NAME = 'geo_distance'
7
+ DEFAULT_DISTANCE_UNIT = ::Enums::DistanceUnits.meters
8
+
9
+ =begin
10
+ @params:
11
+ field_name: geo_point field in the document which is matched with the given query
12
+ point: center point for this query
13
+ distance: The radius of the circle centred on the specified location. Points which fall into this circle are considered to be matches.
14
+ distance_unit: The distance can be specified in various units. See Distance Units.
15
+ distance_type: How to compute the distance. Can either be arc (default),
16
+ or plane (faster, but inaccurate on long distances and close to the poles)
17
+ writable_name: Optional name field to identify the query
18
+ validation_method: Set to IGNORE_MALFORMED to accept geo points with invalid latitude or longitude,
19
+ set to COERCE to additionally try and infer correct coordinates (default is STRICT).
20
+ ignore_unmapped: When set to true the ignore_unmapped option will ignore an unmapped field and will not match any documents for this query.
21
+ When set to false (the default value) the query will throw an exception if the field is not mapped.
22
+ =end
23
+
24
+ def initialize field_name:
25
+ @field_name = field_name
26
+ @point = nil
27
+ @distance = nil
28
+ @distance_unit = DEFAULT_DISTANCE_UNIT.distance_unit
29
+ @distance_type = nil
30
+ @writable_name = nil
31
+ @validation_method = nil
32
+ @ignore_unmapped = nil
33
+ end
34
+
35
+ def query
36
+ query = {}
37
+ geo_query = self.common_query
38
+ geo_query[@field_name] = @point.settings
39
+ geo_query[:distance] = @distance.to_s + @distance_unit.to_s
40
+ geo_query[:distance_type] = @distance_type
41
+ geo_query[:writable_name] = @writable_name
42
+ geo_query[:validation_method] = @validation_method
43
+ geo_query[:ignore_unmapped] = @ignore_unmapped
44
+ query[name.intern] = geo_query
45
+ return query
46
+ end
47
+
48
+ # Returns point
49
+ def point_expr
50
+ return @point
51
+ end
52
+
53
+ # Sets point
54
+ def point point
55
+ @point = point
56
+ return self
57
+ end
58
+
59
+ # Returns field_name
60
+ def field_name_expr
61
+ return @field_name
62
+ end
63
+
64
+ # Returns distance
65
+ def distance_expr
66
+ return @distance
67
+ end
68
+
69
+ # Returns distance_unit
70
+ def distance_unit_expr
71
+ return @distance_unit
72
+ end
73
+
74
+ # Sets distance and distance_unit
75
+ def distance distance, distance_unit= nil
76
+ @distance = distance
77
+ @distance_unit = distance_unit.distance_unit if distance_unit.present?
78
+ return self
79
+ end
80
+
81
+ # Returns distance_type
82
+ def distance_type_expr
83
+ return @distance_type
84
+ end
85
+
86
+ # Sets distance_type
87
+ def distance_type distance_type
88
+ @distance_type = distance_type.distance_type
89
+ return self
90
+ end
91
+
92
+ # Returns writable_name
93
+ def writable_name_expr
94
+ return @writable_name
95
+ end
96
+
97
+ # Sets writable_name
98
+ def writable_name writable_name
99
+ @writable_name = writable_name
100
+ return self
101
+ end
102
+
103
+ # Returns validation_method
104
+ def validation_method_expr
105
+ return @validation_method
106
+ end
107
+
108
+ # Sets validation_method
109
+ def validation_method validation_method
110
+ @validation_method = validation_method.validation_method
111
+ return self
112
+ end
113
+
114
+ # Returns ignore_unmapped
115
+ def ignore_unmapped_expr
116
+ return @ignore_unmapped
117
+ end
118
+
119
+ # Sets ignore_unmapped
120
+ def ignore_unmapped ignore_unmapped
121
+ @ignore_unmapped = ignore_unmapped
122
+ return self
123
+ end
124
+
125
+ end
126
+ end
@@ -0,0 +1,16 @@
1
+ # The most simple query, which matches all documents
2
+ require_relative 'query_builder'
3
+ module Queries
4
+ class MatchAllQueryBuilder < QueryBuilder
5
+
6
+ NAME = 'match_all'
7
+
8
+ def query
9
+ query = {}
10
+ matchall_query = self.common_query
11
+ query[name.intern] = matchall_query
12
+ return query
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,181 @@
1
+ # Match query is a query that analyzes the text and constructs a query as the result of the analysis.
2
+ require_relative 'query_builder'
3
+ module Queries
4
+ class MatchQueryBuilder < QueryBuilder
5
+ =begin
6
+ @params: analyzer, auto_generate_synonyms_phrase_query, cutoff_frequency, field_name, fuzziness, fuzzy_transposition,
7
+ lenient, max_expansions, minimum_should_match, operator, prefix_length, value, zero_terms_query
8
+ analyzer: analyzer to be used for this query
9
+ auto_generate_synonyms_phrase_query: The match query supports multi-terms synonym expansion with the synonym_graph token filter.
10
+ When this filter is used, the parser creates a phrase query for each multi-terms synonyms.
11
+ For example, the following synonym: "ny, new york" would produce:
12
+ (ny OR ("new york"))
13
+ cutoff_frequency: cutoff value in [0..1] (or absolute number >=1) representing the maximum threshold of a terms document frequency
14
+ to be considered a low frequency term.
15
+ field_name: name of the field to be queried
16
+ fuzziness: fuzziness used when evaluated to a fuzzy query type
17
+ fuzzy_transposition: fuzzy transpositions (ab → ba) are allowed by default but can be disabled by setting fuzzy_transpositions to false
18
+ max_expansions: max_expansions limit the number of matching docs that will be returned
19
+ minimum_should_match: minimum number of cases to match in case of or query
20
+ value: value to be matched in that field in the documents
21
+ zero_terms_query: If the analyzer used removes all tokens in a query like a stop filter does, the default behavior is to match no documents at all.
22
+ In order to change that the zero_terms_query option can be used, which accepts none (default) and all which corresponds to a match_all query.
23
+ fuzzy_prefix_length: prefix length provides the number of characters from beginning that have to be exactly matched
24
+ =end
25
+
26
+ NAME = "match"
27
+
28
+ def initialize field_name: , value: nil
29
+ @field_name = field_name
30
+ @value = value
31
+ @zero_terms_query = nil
32
+ @analyzer = nil
33
+ @auto_generate_synonyms_phrase_query = nil
34
+ @cutoff_frequency = nil
35
+ @fuzziness = nil
36
+ @fuzzy_transpositions = nil
37
+ @max_expansions = nil
38
+ @minimum_should_match = nil
39
+ @operator = nil
40
+ @prefix_length = nil
41
+ @zero_terms_query = nil
42
+ end
43
+
44
+ def query
45
+ query = {}
46
+ match_query = {}
47
+ field_options = self.common_query
48
+ field_options[:query] = @value
49
+ field_options[:operator] = @operator if @operator.present?
50
+ field_options[:analyzer] = @analyzer if @analyzer.present?
51
+ field_options[:auto_generate_synonyms_phrase_query] = @auto_generate_synonyms_phrase_query if @auto_generate_synonyms_phrase_query.present?
52
+ field_options[:cutoff_frequency] = @cutoff_frequency if @cutoff_frequency.present?
53
+ field_options[:fuzzy_prefix_length] = @fuzzy_prefix_length if @fuzzy_prefix_length.present?
54
+ field_options[:max_expansions] = @max_expansions if @max_expansions.present?
55
+ field_options[:fuzzy_transpositions] = @fuzzy_transpositions if @fuzzy_transpositions.present?
56
+ field_options[:minimum_should_match] = @minimum_should_match if @minimum_should_match.present?
57
+ field_options[:zero_terms_query] = @zero_terms_query if @zero_terms_query.present?
58
+ field_options[:fuzziness] = @fuzziness if @fuzziness.present?
59
+ match_query[@field_name.to_s.intern] = field_options
60
+ query[name.intern] = match_query
61
+ return query
62
+ end
63
+
64
+ ########## FIELD NAME ##########
65
+ # returns field_name
66
+ def field_name_expr
67
+ return @field_name
68
+ end
69
+
70
+ ########## FIELD VALUE ##########
71
+ # returns value
72
+ def value_expr
73
+ return @value
74
+ end
75
+
76
+ ########## SEARCH ANALYZER ##########
77
+ # return analyzer
78
+ def analyzer_expr
79
+ return @analyzer
80
+ end
81
+ # sets analyzer
82
+ def analyzer value
83
+ @analyzer = value
84
+ return self
85
+ end
86
+
87
+
88
+ ########## AUTO GENERATE SYNONYMS PHRASE QUERY ##########
89
+ # returns auto_generate_synonyms_phrase_query
90
+ def auto_generate_synonyms_phrase_query_expr
91
+ return @auto_generate_synonyms_phrase_query
92
+ end
93
+ # sets auto_generate_synonyms_phrase_query
94
+ def auto_generate_synonyms_phrase_query value
95
+ @auto_generate_synonyms_phrase_query = value
96
+ return self
97
+ end
98
+
99
+
100
+ ########## CUTOFF FREQUENCY ##########
101
+ # returns cutoff_frequency
102
+ def cutoff_frequency_expr
103
+ return @cutoff_frequency
104
+ end
105
+ # sets cutoff_frequency
106
+ def cutoff_frequency value
107
+ @cutoff_frequency = value
108
+ return self
109
+ end
110
+
111
+
112
+ ########## FUZZINESS VALUE ##########
113
+ # returns fuzziness
114
+ def fuzziness_expr
115
+ return @fuzziness
116
+ end
117
+ # sets fuzziness
118
+ def fuzziness fuzziness
119
+ @fuzziness = fuzziness.fuzziness
120
+ return self
121
+ end
122
+
123
+ ########## PREFIX LENGTH ########
124
+ # returns prefix_length
125
+ def fuzzy_prefix_length_expr
126
+ return @prefix_length
127
+ end
128
+ # sets prefix_length
129
+ def fuzzy_prefix_length value
130
+ @prefix_length = value
131
+ return self
132
+ end
133
+
134
+ ########## MAX EXPANSIONS ##########
135
+ # returns max_expansions
136
+ def max_expansions_expr
137
+ return @max_expansions
138
+ end
139
+ # sets max_expansions
140
+ def max_expansions value
141
+ @max_expansions = value
142
+ return self
143
+ end
144
+
145
+ ########## FUZZY TRANSPOSITIONS ##########
146
+ # returns fuzzy_transpositions
147
+ def fuzzy_transpositions_expr
148
+ return @fuzzy_transpositions
149
+ end
150
+ # sets fuzzy_transpositions
151
+ def fuzzy_transpositions value
152
+ @fuzzy_transpositions = value
153
+ return self
154
+ end
155
+
156
+ ########## MINIMUM SHOULD ##########
157
+ # returns minimum_should_match
158
+ def minimum_should_match_expr
159
+ return @minimum_should_match
160
+ end
161
+ # sets minimum_should_match
162
+ def minimum_should_match value
163
+ @minimum_should_match = value
164
+ return self
165
+ end
166
+
167
+ ########## ZERO TERMS ##########
168
+ # returns zero_terms_query
169
+ def zero_terms_query_expr
170
+ return @zero_terms_query
171
+ end
172
+ # sets zero_terms_query
173
+ def zero_terms_query zero_terms_query
174
+ @zero_terms_query = zero_terms_query.zero_term
175
+ return self
176
+ end
177
+
178
+ end
179
+ end
180
+
181
+
@@ -0,0 +1,55 @@
1
+ =begin
2
+ Nested query allows to query nested objects / docs (see nested mapping). The query is executed against the nested objects / docs
3
+ as if they were indexed as separate docs (they are, internally) and resulting in the root parent doc (or parent nested mapping).
4
+ =end
5
+ require_relative 'query_builder'
6
+ module Queries
7
+ class NestedQueryBuilder < QueryBuilder
8
+
9
+ NAME = "nested"
10
+
11
+ attr_reader :path, :inner_query, :score_mode
12
+
13
+ =begin
14
+ @params:
15
+ path: The query path points to the nested object path.
16
+ score_mode: The score_mode allows to set how inner children matching affects scoring of parent.
17
+ It defaults to avg, but can be sum, min, max and none.
18
+ inner_query: query includes the query that will run on the nested docs matching the direct path, and joining with the root parent docs
19
+
20
+ Any fields referenced inside the query must use the complete path (fully qualified)
21
+ =end
22
+ def initialize path:, inner_query:, score_mode: nil, type: :query
23
+ @path = path
24
+ @inner_query = inner_query
25
+ @score_mode = score_mode.score_mode if score_mode.present?
26
+ @type = type
27
+ end
28
+
29
+ def query
30
+ query = {}
31
+ nested_query = self.common_query
32
+ nested_query[:path] = @path if @path.present?
33
+ nested_query[@type] = @inner_query.query if @inner_query.present?
34
+ nested_query[:score_mode] = @score_mode if @score_mode.present?
35
+ query[name.intern] = nested_query
36
+ return query
37
+ end
38
+
39
+ # returns path
40
+ def path_expr
41
+ return @path
42
+ end
43
+
44
+ # returns inner_query
45
+ def inner_query_expr
46
+ return @inner_query
47
+ end
48
+
49
+ # returns score_mode
50
+ def score_mode_expr
51
+ return @score_mode
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,44 @@
1
+ require_relative 'query_builder'
2
+ module Queries
3
+ class NestedSortQueryBuilder < QueryBuilder
4
+
5
+ NAME = "nested"
6
+
7
+ attr_reader :path, :inner_query
8
+
9
+ =begin
10
+ @params:
11
+ path: The query path points to the nested object path.
12
+ inner_query: query includes the query that will run on the nested docs matching the direct path, and joining with the root parent docs
13
+
14
+ Any fields referenced inside the query must use the complete path (fully qualified)
15
+ =end
16
+ def initialize path:, inner_query:
17
+ @path = path
18
+ @inner_query = inner_query
19
+ end
20
+
21
+ def query
22
+ nested_query = self.common_query
23
+ nested_query[:path] = @path if @path.present?
24
+ nested_query[:filter] = @inner_query.query if @inner_query.present?
25
+ return nested_query
26
+ end
27
+
28
+ # returns path
29
+ def path_expr
30
+ return @path
31
+ end
32
+
33
+ # returns inner_query
34
+ def inner_query_expr
35
+ return @inner_query
36
+ end
37
+
38
+ # returns score_mode
39
+ def score_mode_expr
40
+ return @score_mode
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'abstract_query_builder'
4
+ require_relative '../attributes_reader'
5
+ module Queries
6
+ # Base Class for all query classes
7
+ # QueryComponents
8
+ # boost: documents matching the query are boosted by
9
+ # the value
10
+ class QueryBuilder
11
+ include AbstractQueryBuilder
12
+ include AttributesReader
13
+
14
+ NAME = 'base'
15
+
16
+ # @!visibility protected
17
+ # @return [Numeric] the boost for this query
18
+ def boost_expr
19
+ @boost
20
+ end
21
+
22
+ # @param [Numeric]
23
+ # value boost value for the query
24
+ # @return [QueryBuilder] modified self
25
+ # sets the boost value for this query
26
+ def boost(value)
27
+ raise 'boost value is nil' if value.nil?
28
+
29
+ @boost = value
30
+ self
31
+ end
32
+ end
33
+ end