opensearch-dsl 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (272) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/.gitignore +17 -0
  4. data/Gemfile +51 -0
  5. data/LICENSE +202 -0
  6. data/README.md +149 -0
  7. data/Rakefile +234 -0
  8. data/lib/opensearch/dsl/search/aggregation.rb +110 -0
  9. data/lib/opensearch/dsl/search/aggregations/avg.rb +51 -0
  10. data/lib/opensearch/dsl/search/aggregations/cardinality.rb +58 -0
  11. data/lib/opensearch/dsl/search/aggregations/children.rb +65 -0
  12. data/lib/opensearch/dsl/search/aggregations/composite.rb +68 -0
  13. data/lib/opensearch/dsl/search/aggregations/date_histogram.rb +66 -0
  14. data/lib/opensearch/dsl/search/aggregations/date_range.rb +60 -0
  15. data/lib/opensearch/dsl/search/aggregations/extended_stats.rb +50 -0
  16. data/lib/opensearch/dsl/search/aggregations/filter.rb +56 -0
  17. data/lib/opensearch/dsl/search/aggregations/filters.rb +61 -0
  18. data/lib/opensearch/dsl/search/aggregations/geo_bounds.rb +70 -0
  19. data/lib/opensearch/dsl/search/aggregations/geo_distance.rb +65 -0
  20. data/lib/opensearch/dsl/search/aggregations/geohash_grid.rb +61 -0
  21. data/lib/opensearch/dsl/search/aggregations/global.rb +54 -0
  22. data/lib/opensearch/dsl/search/aggregations/histogram.rb +61 -0
  23. data/lib/opensearch/dsl/search/aggregations/ip_range.rb +57 -0
  24. data/lib/opensearch/dsl/search/aggregations/max.rb +51 -0
  25. data/lib/opensearch/dsl/search/aggregations/min.rb +51 -0
  26. data/lib/opensearch/dsl/search/aggregations/missing.rb +61 -0
  27. data/lib/opensearch/dsl/search/aggregations/nested.rb +59 -0
  28. data/lib/opensearch/dsl/search/aggregations/percentile_ranks.rb +60 -0
  29. data/lib/opensearch/dsl/search/aggregations/percentiles.rb +59 -0
  30. data/lib/opensearch/dsl/search/aggregations/pipeline/avg_bucket.rb +59 -0
  31. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_script.rb +61 -0
  32. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_selector.rb +60 -0
  33. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_sort.rb +114 -0
  34. data/lib/opensearch/dsl/search/aggregations/pipeline/cumulative_sum.rb +58 -0
  35. data/lib/opensearch/dsl/search/aggregations/pipeline/derivative.rb +59 -0
  36. data/lib/opensearch/dsl/search/aggregations/pipeline/extended_stats_bucket.rb +59 -0
  37. data/lib/opensearch/dsl/search/aggregations/pipeline/max_bucket.rb +59 -0
  38. data/lib/opensearch/dsl/search/aggregations/pipeline/min_bucket.rb +59 -0
  39. data/lib/opensearch/dsl/search/aggregations/pipeline/moving_avg.rb +67 -0
  40. data/lib/opensearch/dsl/search/aggregations/pipeline/percentiles_bucket.rb +61 -0
  41. data/lib/opensearch/dsl/search/aggregations/pipeline/serial_diff.rb +61 -0
  42. data/lib/opensearch/dsl/search/aggregations/pipeline/stats_bucket.rb +59 -0
  43. data/lib/opensearch/dsl/search/aggregations/pipeline/sum_bucket.rb +59 -0
  44. data/lib/opensearch/dsl/search/aggregations/range.rb +79 -0
  45. data/lib/opensearch/dsl/search/aggregations/reverse_nested.rb +63 -0
  46. data/lib/opensearch/dsl/search/aggregations/scripted_metric.rb +65 -0
  47. data/lib/opensearch/dsl/search/aggregations/significant_terms.rb +71 -0
  48. data/lib/opensearch/dsl/search/aggregations/stats.rb +63 -0
  49. data/lib/opensearch/dsl/search/aggregations/sum.rb +51 -0
  50. data/lib/opensearch/dsl/search/aggregations/terms.rb +68 -0
  51. data/lib/opensearch/dsl/search/aggregations/top_hits.rb +61 -0
  52. data/lib/opensearch/dsl/search/aggregations/value_count.rb +51 -0
  53. data/lib/opensearch/dsl/search/base_aggregation_component.rb +90 -0
  54. data/lib/opensearch/dsl/search/base_component.rb +193 -0
  55. data/lib/opensearch/dsl/search/base_compound_filter_component.rb +123 -0
  56. data/lib/opensearch/dsl/search/filter.rb +81 -0
  57. data/lib/opensearch/dsl/search/filters/and.rb +71 -0
  58. data/lib/opensearch/dsl/search/filters/bool.rb +105 -0
  59. data/lib/opensearch/dsl/search/filters/exists.rb +58 -0
  60. data/lib/opensearch/dsl/search/filters/geo_bounding_box.rb +71 -0
  61. data/lib/opensearch/dsl/search/filters/geo_distance.rb +83 -0
  62. data/lib/opensearch/dsl/search/filters/geo_distance_range.rb +58 -0
  63. data/lib/opensearch/dsl/search/filters/geo_polygon.rb +67 -0
  64. data/lib/opensearch/dsl/search/filters/geo_shape.rb +61 -0
  65. data/lib/opensearch/dsl/search/filters/geohash_cell.rb +72 -0
  66. data/lib/opensearch/dsl/search/filters/has_child.rb +100 -0
  67. data/lib/opensearch/dsl/search/filters/has_parent.rb +99 -0
  68. data/lib/opensearch/dsl/search/filters/ids.rb +58 -0
  69. data/lib/opensearch/dsl/search/filters/indices.rb +103 -0
  70. data/lib/opensearch/dsl/search/filters/limit.rb +57 -0
  71. data/lib/opensearch/dsl/search/filters/match_all.rb +54 -0
  72. data/lib/opensearch/dsl/search/filters/missing.rb +60 -0
  73. data/lib/opensearch/dsl/search/filters/nested.rb +93 -0
  74. data/lib/opensearch/dsl/search/filters/not.rb +99 -0
  75. data/lib/opensearch/dsl/search/filters/or.rb +71 -0
  76. data/lib/opensearch/dsl/search/filters/prefix.rb +55 -0
  77. data/lib/opensearch/dsl/search/filters/query.rb +80 -0
  78. data/lib/opensearch/dsl/search/filters/range.rb +65 -0
  79. data/lib/opensearch/dsl/search/filters/regexp.rb +60 -0
  80. data/lib/opensearch/dsl/search/filters/script.rb +58 -0
  81. data/lib/opensearch/dsl/search/filters/term.rb +57 -0
  82. data/lib/opensearch/dsl/search/filters/terms.rb +58 -0
  83. data/lib/opensearch/dsl/search/filters/type.rb +60 -0
  84. data/lib/opensearch/dsl/search/highlight.rb +117 -0
  85. data/lib/opensearch/dsl/search/options.rb +81 -0
  86. data/lib/opensearch/dsl/search/queries/bool.rb +111 -0
  87. data/lib/opensearch/dsl/search/queries/boosting.rb +59 -0
  88. data/lib/opensearch/dsl/search/queries/common.rb +64 -0
  89. data/lib/opensearch/dsl/search/queries/constant_score.rb +92 -0
  90. data/lib/opensearch/dsl/search/queries/dis_max.rb +61 -0
  91. data/lib/opensearch/dsl/search/queries/exists.rb +69 -0
  92. data/lib/opensearch/dsl/search/queries/filtered.rb +103 -0
  93. data/lib/opensearch/dsl/search/queries/function_score.rb +128 -0
  94. data/lib/opensearch/dsl/search/queries/fuzzy.rb +71 -0
  95. data/lib/opensearch/dsl/search/queries/fuzzy_like_this.rb +63 -0
  96. data/lib/opensearch/dsl/search/queries/fuzzy_like_this_field.rb +62 -0
  97. data/lib/opensearch/dsl/search/queries/geo_shape.rb +56 -0
  98. data/lib/opensearch/dsl/search/queries/has_child.rb +84 -0
  99. data/lib/opensearch/dsl/search/queries/has_parent.rb +84 -0
  100. data/lib/opensearch/dsl/search/queries/ids.rb +54 -0
  101. data/lib/opensearch/dsl/search/queries/indices.rb +60 -0
  102. data/lib/opensearch/dsl/search/queries/match.rb +69 -0
  103. data/lib/opensearch/dsl/search/queries/match_all.rb +52 -0
  104. data/lib/opensearch/dsl/search/queries/match_phrase.rb +58 -0
  105. data/lib/opensearch/dsl/search/queries/match_phrase_prefix.rb +57 -0
  106. data/lib/opensearch/dsl/search/queries/more_like_this.rb +90 -0
  107. data/lib/opensearch/dsl/search/queries/multi_match.rb +71 -0
  108. data/lib/opensearch/dsl/search/queries/nested.rb +82 -0
  109. data/lib/opensearch/dsl/search/queries/prefix.rb +56 -0
  110. data/lib/opensearch/dsl/search/queries/query_string.rb +77 -0
  111. data/lib/opensearch/dsl/search/queries/range.rb +73 -0
  112. data/lib/opensearch/dsl/search/queries/regexp.rb +57 -0
  113. data/lib/opensearch/dsl/search/queries/simple_query_string.rb +66 -0
  114. data/lib/opensearch/dsl/search/queries/span_first.rb +54 -0
  115. data/lib/opensearch/dsl/search/queries/span_multi.rb +54 -0
  116. data/lib/opensearch/dsl/search/queries/span_near.rb +58 -0
  117. data/lib/opensearch/dsl/search/queries/span_not.rb +59 -0
  118. data/lib/opensearch/dsl/search/queries/span_or.rb +54 -0
  119. data/lib/opensearch/dsl/search/queries/span_term.rb +52 -0
  120. data/lib/opensearch/dsl/search/queries/template.rb +57 -0
  121. data/lib/opensearch/dsl/search/queries/term.rb +52 -0
  122. data/lib/opensearch/dsl/search/queries/terms.rb +53 -0
  123. data/lib/opensearch/dsl/search/queries/top_children.rb +84 -0
  124. data/lib/opensearch/dsl/search/queries/wildcard.rb +56 -0
  125. data/lib/opensearch/dsl/search/query.rb +80 -0
  126. data/lib/opensearch/dsl/search/sort.rb +84 -0
  127. data/lib/opensearch/dsl/search/suggest.rb +53 -0
  128. data/lib/opensearch/dsl/search.rb +288 -0
  129. data/lib/opensearch/dsl/utils.rb +51 -0
  130. data/lib/opensearch/dsl/version.rb +31 -0
  131. data/lib/opensearch/dsl.rb +72 -0
  132. data/lib/opensearch-dsl.rb +27 -0
  133. data/opensearch-dsl.gemspec +81 -0
  134. data/spec/opensearch/dsl/search/aggregations/avg_spec.rb +52 -0
  135. data/spec/opensearch/dsl/search/aggregations/cardinality_spec.rb +119 -0
  136. data/spec/opensearch/dsl/search/aggregations/children_spec.rb +75 -0
  137. data/spec/opensearch/dsl/search/aggregations/composite_spec.rb +108 -0
  138. data/spec/opensearch/dsl/search/aggregations/date_histogram_spec.rb +198 -0
  139. data/spec/opensearch/dsl/search/aggregations/date_range_spec.rb +98 -0
  140. data/spec/opensearch/dsl/search/aggregations/extended_stats_spec.rb +52 -0
  141. data/spec/opensearch/dsl/search/aggregations/filter_spec.rb +57 -0
  142. data/spec/opensearch/dsl/search/aggregations/filters_spec.rb +98 -0
  143. data/spec/opensearch/dsl/search/aggregations/geo_bounds_spec.rb +86 -0
  144. data/spec/opensearch/dsl/search/aggregations/geo_distance_spec.rb +122 -0
  145. data/spec/opensearch/dsl/search/aggregations/geo_grid_spec.rb +109 -0
  146. data/spec/opensearch/dsl/search/aggregations/global_spec.rb +71 -0
  147. data/spec/opensearch/dsl/search/aggregations/historgram_spec.rb +131 -0
  148. data/spec/opensearch/dsl/search/aggregations/ip_range_spec.rb +102 -0
  149. data/spec/opensearch/dsl/search/aggregations/max_spec.rb +52 -0
  150. data/spec/opensearch/dsl/search/aggregations/min_spec.rb +52 -0
  151. data/spec/opensearch/dsl/search/aggregations/missing_spec.rb +90 -0
  152. data/spec/opensearch/dsl/search/aggregations/nested_spec.rb +95 -0
  153. data/spec/opensearch/dsl/search/aggregations/percentile_ranks_spec.rb +135 -0
  154. data/spec/opensearch/dsl/search/aggregations/percentiles_spec.rb +134 -0
  155. data/spec/opensearch/dsl/search/aggregations/pipeline/avg_bucket_spec.rb +97 -0
  156. data/spec/opensearch/dsl/search/aggregations/pipeline/bucket_script_spec.rb +108 -0
  157. data/spec/opensearch/dsl/search/aggregations/pipeline/bucket_selector_spec.rb +97 -0
  158. data/spec/opensearch/dsl/search/aggregations/pipeline/bucket_sort_spec.rb +113 -0
  159. data/spec/opensearch/dsl/search/aggregations/pipeline/cumulative_sum_spec.rb +86 -0
  160. data/spec/opensearch/dsl/search/aggregations/pipeline/derivative_spec.rb +97 -0
  161. data/spec/opensearch/dsl/search/aggregations/pipeline/extended_stats_bucket_spec.rb +97 -0
  162. data/spec/opensearch/dsl/search/aggregations/pipeline/max_bucket_spec.rb +97 -0
  163. data/spec/opensearch/dsl/search/aggregations/pipeline/min_bucket_spec.rb +97 -0
  164. data/spec/opensearch/dsl/search/aggregations/pipeline/moving_avg_test_spec.rb +141 -0
  165. data/spec/opensearch/dsl/search/aggregations/pipeline/percentiles_bucket_spec.rb +108 -0
  166. data/spec/opensearch/dsl/search/aggregations/pipeline/serial_diff_spec.rb +108 -0
  167. data/spec/opensearch/dsl/search/aggregations/pipeline/stats_bucket_spec.rb +97 -0
  168. data/spec/opensearch/dsl/search/aggregations/pipeline/sum_bucket_spec.rb +97 -0
  169. data/spec/opensearch/dsl/search/aggregations/range_spec.rb +128 -0
  170. data/spec/opensearch/dsl/search/aggregations/reverse_nested_spec.rb +41 -0
  171. data/spec/opensearch/dsl/search/aggregations/scripted_metric_spec.rb +130 -0
  172. data/spec/opensearch/dsl/search/aggregations/significant_terms_spec.rb +185 -0
  173. data/spec/opensearch/dsl/search/aggregations/stats_spec.rb +65 -0
  174. data/spec/opensearch/dsl/search/aggregations/sum_spec.rb +52 -0
  175. data/spec/opensearch/dsl/search/aggregations/terms_spec.rb +174 -0
  176. data/spec/opensearch/dsl/search/aggregations/top_hits_spec.rb +97 -0
  177. data/spec/opensearch/dsl/search/aggregations/value_count_spec.rb +52 -0
  178. data/spec/opensearch/dsl/search/filters/and_spec.rb +83 -0
  179. data/spec/opensearch/dsl/search/filters/bool_spec.rb +208 -0
  180. data/spec/opensearch/dsl/search/filters/exists_spec.rb +75 -0
  181. data/spec/opensearch/dsl/search/filters/geo_bounding_box_spec.rb +153 -0
  182. data/spec/opensearch/dsl/search/filters/geo_distance_range_spec.rb +112 -0
  183. data/spec/opensearch/dsl/search/filters/geo_distance_spec.rb +135 -0
  184. data/spec/opensearch/dsl/search/filters/geo_polygon_spec.rb +75 -0
  185. data/spec/opensearch/dsl/search/filters/geo_shape_spec.rb +86 -0
  186. data/spec/opensearch/dsl/search/filters/geohash_cell_spec.rb +108 -0
  187. data/spec/opensearch/dsl/search/filters/has_child_spec.rb +148 -0
  188. data/spec/opensearch/dsl/search/filters/has_parent_spec.rb +137 -0
  189. data/spec/opensearch/dsl/search/filters/ids_spec.rb +87 -0
  190. data/spec/opensearch/dsl/search/filters/indices_spec.rb +118 -0
  191. data/spec/opensearch/dsl/search/filters/limit_spec.rb +75 -0
  192. data/spec/opensearch/dsl/search/filters/match_all_spec.rb +41 -0
  193. data/spec/opensearch/dsl/search/filters/missing_spec.rb +75 -0
  194. data/spec/opensearch/dsl/search/filters/nested_spec.rb +100 -0
  195. data/spec/opensearch/dsl/search/filters/not_spec.rb +68 -0
  196. data/spec/opensearch/dsl/search/filters/or_spec.rb +84 -0
  197. data/spec/opensearch/dsl/search/filters/prefix_spec.rb +55 -0
  198. data/spec/opensearch/dsl/search/filters/query_spec.rb +68 -0
  199. data/spec/opensearch/dsl/search/filters/range_spec.rb +120 -0
  200. data/spec/opensearch/dsl/search/filters/regexp_spec.rb +97 -0
  201. data/spec/opensearch/dsl/search/filters/script_spec.rb +86 -0
  202. data/spec/opensearch/dsl/search/filters/term_spec.rb +66 -0
  203. data/spec/opensearch/dsl/search/filters/terms_spec.rb +55 -0
  204. data/spec/opensearch/dsl/search/filters/type_spec.rb +75 -0
  205. data/spec/opensearch/dsl/search/queries/bool_spec.rb +276 -0
  206. data/spec/opensearch/dsl/search/queries/boosting_spec.rb +99 -0
  207. data/spec/opensearch/dsl/search/queries/common_spec.rb +141 -0
  208. data/spec/opensearch/dsl/search/queries/constant_score_spec.rb +99 -0
  209. data/spec/opensearch/dsl/search/queries/dis_max_spec.rb +97 -0
  210. data/spec/opensearch/dsl/search/queries/exists_spec.rb +75 -0
  211. data/spec/opensearch/dsl/search/queries/filtered_spec.rb +102 -0
  212. data/spec/opensearch/dsl/search/queries/function_score_spec.rb +173 -0
  213. data/spec/opensearch/dsl/search/queries/fuzzy_like_this_field_spec.rb +141 -0
  214. data/spec/opensearch/dsl/search/queries/fuzzy_like_this_spec.rb +143 -0
  215. data/spec/opensearch/dsl/search/queries/fuzzy_spec.rb +119 -0
  216. data/spec/opensearch/dsl/search/queries/geo_shape_spec.rb +86 -0
  217. data/spec/opensearch/dsl/search/queries/has_child_spec.rb +135 -0
  218. data/spec/opensearch/dsl/search/queries/has_parent_spec.rb +109 -0
  219. data/spec/opensearch/dsl/search/queries/ids_spec.rb +87 -0
  220. data/spec/opensearch/dsl/search/queries/indices_spec.rb +98 -0
  221. data/spec/opensearch/dsl/search/queries/match_all_spec.rb +75 -0
  222. data/spec/opensearch/dsl/search/queries/match_phrase_prefix_spec.rb +112 -0
  223. data/spec/opensearch/dsl/search/queries/match_phrase_spec.rb +123 -0
  224. data/spec/opensearch/dsl/search/queries/match_spec.rb +116 -0
  225. data/spec/opensearch/dsl/search/queries/more_like_this_spec.rb +96 -0
  226. data/spec/opensearch/dsl/search/queries/multi_match_spec.rb +83 -0
  227. data/spec/opensearch/dsl/search/queries/nested_spec.rb +107 -0
  228. data/spec/opensearch/dsl/search/queries/prefix_spec.rb +79 -0
  229. data/spec/opensearch/dsl/search/queries/query_string_spec.rb +98 -0
  230. data/spec/opensearch/dsl/search/queries/range_spec.rb +87 -0
  231. data/spec/opensearch/dsl/search/queries/regexp_spec.rb +91 -0
  232. data/spec/opensearch/dsl/search/queries/simple_query_string_spec.rb +83 -0
  233. data/spec/opensearch/dsl/search/queries/span_first_spec.rb +78 -0
  234. data/spec/opensearch/dsl/search/queries/span_multi_spec.rb +78 -0
  235. data/spec/opensearch/dsl/search/queries/span_near_spec.rb +81 -0
  236. data/spec/opensearch/dsl/search/queries/span_not_spec.rb +82 -0
  237. data/spec/opensearch/dsl/search/queries/span_or_spec.rb +78 -0
  238. data/spec/opensearch/dsl/search/queries/span_term_spec.rb +55 -0
  239. data/spec/opensearch/dsl/search/queries/template_spec.rb +93 -0
  240. data/spec/opensearch/dsl/search/queries/term_spec.rb +66 -0
  241. data/spec/opensearch/dsl/search/queries/terms_spec.rb +55 -0
  242. data/spec/opensearch/dsl/search/queries/top_children_spec.rb +102 -0
  243. data/spec/opensearch/dsl/search/queries/wildcard_spec.rb +90 -0
  244. data/spec/spec_helper.rb +33 -0
  245. data/test/integration/search_aggregation_children_test.rb +91 -0
  246. data/test/integration/search_aggregation_geo_test.rb +111 -0
  247. data/test/integration/search_aggregation_nested_test.rb +128 -0
  248. data/test/integration/search_aggregations_test.rb +287 -0
  249. data/test/integration/search_filters_test.rb +290 -0
  250. data/test/integration/search_options_test.rb +54 -0
  251. data/test/integration/search_query_test.rb +99 -0
  252. data/test/integration/search_size_from_test.rb +71 -0
  253. data/test/integration/search_sort_test.rb +58 -0
  254. data/test/integration/search_suggest_test.rb +103 -0
  255. data/test/integration/search_test.rb +82 -0
  256. data/test/test_helper.rb +95 -0
  257. data/test/unit/dsl_test.rb +44 -0
  258. data/test/unit/search_aggregation_test.rb +98 -0
  259. data/test/unit/search_base_aggregation_component_test.rb +67 -0
  260. data/test/unit/search_base_component_test.rb +212 -0
  261. data/test/unit/search_filter_test.rb +87 -0
  262. data/test/unit/search_highlight_test.rb +103 -0
  263. data/test/unit/search_options_test.rb +114 -0
  264. data/test/unit/search_query_test.rb +91 -0
  265. data/test/unit/search_size_from_test.rb +69 -0
  266. data/test/unit/search_sort_test.rb +91 -0
  267. data/test/unit/search_suggest_test.rb +46 -0
  268. data/test/unit/search_test.rb +270 -0
  269. data/test/unit/utils_test.rb +47 -0
  270. data.tar.gz.sig +3 -0
  271. metadata +654 -0
  272. metadata.gz.sig +0 -0
@@ -0,0 +1,33 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ require 'opensearch'
28
+ require 'opensearch-dsl'
29
+
30
+ RSpec.configure do |config|
31
+ config.formatter = 'documentation'
32
+ config.color = true
33
+ end
@@ -0,0 +1,91 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ require 'test_helper'
28
+
29
+ module OpenSearch
30
+ module Test
31
+ class ChildrenAggregationIntegrationTest < ::OpenSearch::Test::IntegrationTestCase
32
+ include OpenSearch::DSL::Search
33
+
34
+ context "A children aggregation" do
35
+
36
+ setup do
37
+ @client.indices.create index: 'articles-and-comments', body: {
38
+ mappings: {
39
+ properties: {
40
+ title: {type: 'text'},
41
+ category: {type: 'keyword'},
42
+ join_field: {type: 'join', relations: {article: 'comment'}},
43
+ author: {type: 'keyword'}
44
+ }
45
+ }
46
+ }
47
+
48
+ @client.index index: 'articles-and-comments', id: 1,
49
+ body: { title: 'A', category: 'one', join_field: 'article' }
50
+ @client.index index: 'articles-and-comments', id: 2,
51
+ body: { title: 'B', category: 'one', join_field: 'article' }
52
+ @client.index index: 'articles-and-comments', id: 3,
53
+ body: { title: 'C', category: 'two', join_field: 'article' }
54
+
55
+ @client.index index: 'articles-and-comments', routing: '1',
56
+ body: { author: 'John', join_field: { name: 'comment', parent: 1 } }
57
+ @client.index index: 'articles-and-comments', routing: '1',
58
+ body: { author: 'Mary', join_field: { name: 'comment', parent: 1 } }
59
+ @client.index index: 'articles-and-comments', routing: '2',
60
+ body: { author: 'John', join_field: { name: 'comment', parent: 2 } }
61
+ @client.index index: 'articles-and-comments', routing: '2',
62
+ body: { author: 'Dave', join_field: { name: 'comment', parent: 2 } }
63
+ @client.index index: 'articles-and-comments', routing: '3',
64
+ body: { author: 'Ruth', join_field: { name: 'comment', parent: 3 } }
65
+ @client.indices.refresh index: 'articles-and-comments'
66
+ end
67
+
68
+ should "return the top commenters per article category" do
69
+ response = @client.search index: 'articles-and-comments', size: 0, body: search {
70
+ aggregation :top_categories do
71
+ terms field: 'category' do
72
+ aggregation :comments do
73
+ children type: 'comment' do
74
+ aggregation :top_authors do
75
+ terms field: 'author'
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ }.to_hash
82
+
83
+ assert_equal 'one', response['aggregations']['top_categories']['buckets'][0]['key']
84
+ assert_equal 3, response['aggregations']['top_categories']['buckets'][0]['comments']['top_authors']['buckets'].size
85
+ assert_equal 'John', response['aggregations']['top_categories']['buckets'][0]['comments']['top_authors']['buckets'][0]['key']
86
+
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,111 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ require 'test_helper'
28
+
29
+ module OpenSearch
30
+ module Test
31
+ class GeoAggregationIntegrationTest < ::OpenSearch::Test::IntegrationTestCase
32
+ include OpenSearch::DSL::Search
33
+
34
+ context "A geo aggregation" do
35
+
36
+ setup do
37
+ @client.indices.create index: 'venues-test', body: {
38
+ mappings: {
39
+ properties: {
40
+ location: {type: 'geo_point'}
41
+ }
42
+ }
43
+ }
44
+ @client.index index: 'venues-test',
45
+ body: { name: 'Space', location: "38.886214,1.403889" }
46
+ @client.index index: 'venues-test',
47
+ body: { name: 'Pacha', location: "38.9184427,1.4433646" }
48
+ @client.index index: 'venues-test',
49
+ body: { name: 'Amnesia', location: "38.948045,1.408341" }
50
+ @client.index index: 'venues-test',
51
+ body: { name: 'Privilege', location: "38.958082,1.408288" }
52
+ @client.index index: 'venues-test',
53
+ body: { name: 'Es Paradis', location: "38.979071,1.307394" }
54
+ @client.indices.refresh index: 'venues-test'
55
+ end
56
+
57
+ should "return the geo distances from a location" do
58
+ response = @client.search index: 'venues-test', size: 0, body: search {
59
+ aggregation :venue_distances do
60
+ geo_distance do
61
+ field :location
62
+ origin '38.9126352,1.4350621'
63
+ unit 'km'
64
+ ranges [ { to: 1 }, { from: 1, to: 5 }, { from: 5, to: 10 }, { from: 10 } ]
65
+
66
+ aggregation :top_venues do
67
+ top_hits _source: { include: 'name' }
68
+ end
69
+ end
70
+ end
71
+ }.to_hash
72
+
73
+ result = response['aggregations']['venue_distances']
74
+
75
+ assert_equal 4, result['buckets'].size
76
+ assert_equal 1, result['buckets'][0]['doc_count']
77
+ assert_equal 'Pacha', result['buckets'][0]['top_venues']['hits']['hits'][0]['_source']['name']
78
+
79
+ assert_equal 2, result['buckets'][1]['top_venues']['hits']['total']['value']
80
+ end
81
+
82
+ should "return the geohash grid distribution" do
83
+ #
84
+ # See the geohash plot eg. at http://openlocation.org/geohash/geohash-js/
85
+ # See the locations visually eg. at http://geohash.org/sncj8h17r2
86
+ #
87
+ response = @client.search index: 'venues-test', size: 0, body: search {
88
+ aggregation :venue_distributions do
89
+ geohash_grid do
90
+ field :location
91
+ precision 5
92
+
93
+ aggregation :top_venues do
94
+ top_hits _source: { include: 'name' }
95
+ end
96
+ end
97
+ end
98
+ }.to_hash
99
+
100
+ result = response['aggregations']['venue_distributions']
101
+
102
+ assert_equal 4, result['buckets'].size
103
+ assert_equal 'sncj8', result['buckets'][0]['key']
104
+ assert_equal 2, result['buckets'][0]['doc_count']
105
+
106
+ assert_same_elements %w[ Privilege Amnesia ], result['buckets'][0]['top_venues']['hits']['hits'].map { |h| h['_source']['name'] }
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,128 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ require 'test_helper'
28
+
29
+ module OpenSearch
30
+ module Test
31
+ class NestedAggregationIntegrationTest < ::OpenSearch::Test::IntegrationTestCase
32
+ include OpenSearch::DSL::Search
33
+
34
+ context "A nested aggregation" do
35
+
36
+ setup do
37
+ @client.indices.create index: 'products-test', body: {
38
+ mappings: {
39
+ properties: {
40
+ title: {type: 'text'},
41
+ category: {type: 'keyword'},
42
+ offers: {
43
+ type: 'nested',
44
+ properties: {
45
+ name: {type: 'text'},
46
+ price: {type: 'double'}
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ @client.index index: 'products-test',
54
+ body: { title: 'A',
55
+ category: 'audio',
56
+ offers: [ { name: 'A1', price: 100 }, { name: 'A2', price: 120 } ] }
57
+ @client.index index: 'products-test',
58
+ body: { title: 'B',
59
+ category: 'audio',
60
+ offers: [ { name: 'B1', price: 200 }, { name: 'B2', price: 180 } ] }
61
+ @client.index index: 'products-test',
62
+ body: { title: 'C',
63
+ category: 'video',
64
+ offers: [ { name: 'C1', price: 300 }, { name: 'C2', price: 350 } ] }
65
+ @client.indices.refresh index: 'products-test'
66
+ end
67
+
68
+ should "return the minimal price from offers" do
69
+ response = @client.search index: 'products-test', body: search {
70
+ query { match title: 'A' }
71
+
72
+ aggregation :offers do
73
+ nested do
74
+ path 'offers'
75
+ aggregation :min_price do
76
+ min field: 'offers.price'
77
+ end
78
+ end
79
+ end
80
+ }.to_hash
81
+
82
+ assert_equal 100, response['aggregations']['offers']['min_price']['value'].to_i
83
+ end
84
+
85
+ should "return the top categories for offer price range" do
86
+ response = @client.search index: 'products-test', body: search {
87
+ query do
88
+ bool do
89
+ must do
90
+ nested do
91
+ path 'offers'
92
+ query do
93
+ bool do
94
+ filter do
95
+ range 'offers.price' do
96
+ gte 100
97
+ lte 300
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ aggregation :offers do
108
+ nested do
109
+ path 'offers'
110
+ aggregation :top_categories do
111
+ reverse_nested do
112
+ aggregation :top_category_per_offer do
113
+ terms field: 'category'
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ }.to_hash
120
+
121
+ assert_equal 2, response['aggregations']['offers']['top_categories']['top_category_per_offer']['buckets'].size
122
+ assert_equal 'audio', response['aggregations']['offers']['top_categories']['top_category_per_offer']['buckets'][0]['key']
123
+ assert_equal 'video', response['aggregations']['offers']['top_categories']['top_category_per_offer']['buckets'][1]['key']
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,287 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ require 'test_helper'
28
+
29
+ module OpenSearch
30
+ module Test
31
+ class AggregationsIntegrationTest < ::OpenSearch::Test::IntegrationTestCase
32
+ include OpenSearch::DSL::Search
33
+
34
+ context "Aggregations integration" do
35
+ setup do
36
+ @client.indices.create index: 'test', body: {
37
+ mappings: {
38
+ properties: {
39
+ tags: {type: 'keyword'}
40
+ }
41
+ }
42
+ }
43
+ @client.index index: 'test', id: '1', body: { title: 'A', tags: %w[one], clicks: 5 }
44
+ @client.index index: 'test', id: '2', body: { title: 'B', tags: %w[one two], clicks: 15 }
45
+ @client.index index: 'test', id: '3', body: { title: 'C', tags: %w[one three], clicks: 20 }
46
+ @client.indices.refresh index: 'test'
47
+ end
48
+
49
+ context "with a terms aggregation" do
50
+ should "return tag counts" do
51
+ response = @client.search index: 'test', body: search {
52
+ aggregation :tags do
53
+ terms field: 'tags'
54
+ end
55
+ }.to_hash
56
+
57
+ assert_equal 3, response['aggregations']['tags']['buckets'].size
58
+ assert_equal 'one', response['aggregations']['tags']['buckets'][0]['key']
59
+ end
60
+
61
+ should "return approximate tag counts" do
62
+ response = @client.search index: 'test', body: search {
63
+ aggregation :tags do
64
+ cardinality field: 'tags'
65
+ end
66
+ }.to_hash
67
+
68
+ assert_equal 3, response['aggregations']['tags']['value']
69
+ end
70
+
71
+ should "return tag counts per clicks range as an inner (nested) aggregation" do
72
+ response = @client.search index: 'test', body: search {
73
+ aggregation :clicks do
74
+ range field: 'clicks' do
75
+ key :low, to: 10
76
+ key :mid, from: 10, to: 20
77
+
78
+ aggregation :tags do
79
+ terms field: 'tags'
80
+ end
81
+ end
82
+ end
83
+ }.to_hash
84
+
85
+ assert_equal 2, response['aggregations']['clicks']['buckets'].size
86
+ assert_equal 1, response['aggregations']['clicks']['buckets']['low']['doc_count']
87
+ assert_equal 'one', response['aggregations']['clicks']['buckets']['low']['tags']['buckets'][0]['key']
88
+ end
89
+
90
+ should "define multiple aggregations" do
91
+ response = @client.search index: 'test', body: search {
92
+ aggregation :clicks do
93
+ range field: 'clicks' do
94
+ key :low, to: 10
95
+ key :mid, from: 10, to: 20
96
+
97
+ aggregation :tags do
98
+ terms { field 'tags' }
99
+ end
100
+ end
101
+ end
102
+
103
+ aggregation :min_clicks do
104
+ min field: 'clicks'
105
+ end
106
+
107
+ aggregation :max_clicks do
108
+ max field: 'clicks'
109
+ end
110
+
111
+ aggregation :sum_clicks do
112
+ sum field: 'clicks'
113
+ end
114
+
115
+ aggregation :avg_clicks do
116
+ avg field: 'clicks'
117
+ end
118
+ }.to_hash
119
+
120
+ assert_equal 2, response['aggregations']['clicks']['buckets'].size
121
+ assert_equal 1, response['aggregations']['clicks']['buckets']['low']['doc_count']
122
+ assert_equal 'one', response['aggregations']['clicks']['buckets']['low']['tags']['buckets'][0]['key']
123
+
124
+ assert_equal 5, response['aggregations']['min_clicks']['value']
125
+ assert_equal 20, response['aggregations']['max_clicks']['value']
126
+ assert_equal 40, response['aggregations']['sum_clicks']['value']
127
+ assert_equal 13, response['aggregations']['avg_clicks']['value'].to_i
128
+ end
129
+
130
+ should "define a global aggregation" do
131
+ response = @client.search index: 'test', body: search {
132
+ query do
133
+ bool filter: { terms: { tags: ['two'] } }
134
+ end
135
+
136
+ aggregation :avg_clicks do
137
+ avg field: 'clicks'
138
+ end
139
+
140
+ aggregation :all_documents do
141
+ global do
142
+ aggregation :avg_clicks do
143
+ avg field: 'clicks'
144
+ end
145
+ end
146
+ end
147
+ }.to_hash
148
+
149
+ assert_equal 15, response['aggregations']['avg_clicks']['value'].to_i
150
+ assert_equal 13, response['aggregations']['all_documents']['avg_clicks']['value'].to_i
151
+ end
152
+
153
+ should "return statistics on clicks" do
154
+ response = @client.search index: 'test', body: search {
155
+ aggregation :stats_clicks do
156
+ stats field: 'clicks'
157
+ end
158
+ aggregation :value_count do
159
+ value_count field: 'clicks'
160
+ end
161
+ }.to_hash
162
+
163
+ assert_equal 3, response['aggregations']['stats_clicks']['count']
164
+ assert_equal 5, response['aggregations']['stats_clicks']['min']
165
+ assert_equal 20, response['aggregations']['stats_clicks']['max']
166
+ assert_equal 40, response['aggregations']['stats_clicks']['sum']
167
+ assert_equal 13, response['aggregations']['stats_clicks']['avg'].to_i
168
+ assert_equal 3, response['aggregations']['value_count']['value']
169
+ end
170
+
171
+ should "return percentiles on clicks" do
172
+ response = @client.search index: 'test', body: search {
173
+ aggregation :percentiles do
174
+ percentiles field: 'clicks'
175
+ end
176
+ }.to_hash
177
+
178
+ assert_equal 20, response['aggregations']['percentiles']['values']['99.0'].round
179
+ end
180
+
181
+ should "return percentile ranks on clicks" do
182
+ response = @client.search index: 'test', body: search {
183
+ aggregation :percentiles do
184
+ percentile_ranks field: 'clicks', values: [5]
185
+ end
186
+ }.to_hash
187
+
188
+ assert_equal 17, response['aggregations']['percentiles']['values']['5.0'].round
189
+ end
190
+
191
+ should "return top hits per tag" do
192
+ response = @client.search index: 'test', body: search {
193
+ aggregation :tags do
194
+ terms do
195
+ field 'tags'
196
+ size 5
197
+
198
+ aggregation :top_hits do
199
+ top_hits sort: [ clicks: { order: 'desc' } ], _source: { include: 'title' }
200
+ end
201
+ end
202
+ end
203
+ }.to_hash
204
+
205
+ assert_equal 3, response['aggregations']['tags']['buckets'][0]['top_hits']['hits']['hits'].size
206
+ assert_equal 'C', response['aggregations']['tags']['buckets'][0]['top_hits']['hits']['hits'][0]['_source']['title']
207
+ end
208
+
209
+ should "calculate clicks for a tag" do
210
+ response = @client.search index: 'test', body: search {
211
+ aggregation :clicks_for_one do
212
+ scripted_metric do
213
+ init_script "state.transactions = []"
214
+ map_script "if (doc['tags'].value.contains('one')) { state.transactions.add(doc['clicks'].value) }"
215
+ combine_script "double sum = 0; for (t in state.transactions) { sum += t } return sum"
216
+ reduce_script "double sum = 0; for (a in states) { sum += a } return sum"
217
+ end
218
+ end
219
+ }.to_hash
220
+
221
+ assert_equal 40, response['aggregations']['clicks_for_one']['value']
222
+ end
223
+
224
+ should "limit the scope with a filter" do
225
+ response = @client.search index: 'test', body: search {
226
+ aggregation :clicks_for_one do
227
+ filter terms: { tags: ['one'] } do
228
+ aggregation :sum_clicks do
229
+ sum field: 'clicks'
230
+ end
231
+ end
232
+ end
233
+ }.to_hash
234
+
235
+ assert_equal 40, response['aggregations']['clicks_for_one']['sum_clicks']['value']
236
+ end
237
+ end
238
+
239
+ should "return aggregations for multiple filters" do
240
+ response = @client.search index: 'test', body: search {
241
+ aggregation :avg_clicks_per_tag do
242
+ filters do
243
+ filters one: { terms: { tags: ['one'] } },
244
+ two: { terms: { tags: ['two'] } }
245
+ aggregation :avg do
246
+ avg field: 'clicks'
247
+ end
248
+ end
249
+ end
250
+ }.to_hash
251
+
252
+ assert_equal 13, response['aggregations']['avg_clicks_per_tag']['buckets']['one']['avg']['value'].to_i
253
+ assert_equal 15, response['aggregations']['avg_clicks_per_tag']['buckets']['two']['avg']['value'].to_i
254
+ end
255
+
256
+ should "return a histogram on clicks" do
257
+ response = @client.search index: 'test', body: search {
258
+ aggregation :clicks_histogram do
259
+ histogram do
260
+ field 'clicks'
261
+ interval 10
262
+ end
263
+ end
264
+ }.to_hash
265
+
266
+ assert_equal 3, response['aggregations']['clicks_histogram']['buckets'].size
267
+ assert_equal 10, response['aggregations']['clicks_histogram']['buckets'][1]['key']
268
+ assert_equal 1, response['aggregations']['clicks_histogram']['buckets'][1]['doc_count']
269
+ end
270
+
271
+ should "return a histogram with empty buckets on clicks" do
272
+ response = @client.search index: 'test', body: search {
273
+ aggregation :clicks_histogram do
274
+ histogram do
275
+ field 'clicks'
276
+ interval 2
277
+ min_doc_count 0
278
+ end
279
+ end
280
+ }.to_hash
281
+
282
+ assert_equal 9, response['aggregations']['clicks_histogram']['buckets'].size
283
+ end
284
+ end
285
+ end
286
+ end
287
+ end