opensearch-ruby 2.0.3 → 3.4.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.
Files changed (444) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +80 -46
  4. data/USER_GUIDE.md +149 -0
  5. data/bin/opensearch_ruby_console +4 -34
  6. data/lib/opensearch/api/actions/abort_benchmark.rb +49 -0
  7. data/lib/opensearch/api/actions/benchmark.rb +88 -0
  8. data/lib/opensearch/api/actions/bulk.rb +91 -0
  9. data/lib/opensearch/api/actions/cat/aliases.rb +79 -0
  10. data/lib/opensearch/api/actions/cat/all_pit_segments.rb +45 -0
  11. data/lib/opensearch/api/actions/cat/allocation.rb +83 -0
  12. data/lib/opensearch/api/actions/cat/cluster_manager.rb +54 -0
  13. data/lib/opensearch/api/actions/cat/count.rb +75 -0
  14. data/lib/opensearch/api/actions/cat/fielddata.rb +77 -0
  15. data/lib/opensearch/api/actions/cat/health.rb +72 -0
  16. data/lib/opensearch/api/actions/cat/help.rb +61 -0
  17. data/lib/opensearch/api/actions/cat/indices.rb +93 -0
  18. data/lib/opensearch/api/actions/cat/master.rb +73 -0
  19. data/lib/opensearch/api/actions/cat/nodeattrs.rb +73 -0
  20. data/lib/opensearch/api/actions/cat/nodes.rb +82 -0
  21. data/lib/opensearch/api/actions/cat/params_registry.rb +69 -0
  22. data/lib/opensearch/api/actions/cat/pending_tasks.rb +76 -0
  23. data/lib/opensearch/api/actions/cat/pit_segments.rb +48 -0
  24. data/lib/opensearch/api/actions/cat/plugins.rb +75 -0
  25. data/lib/opensearch/api/actions/cat/recovery.rb +84 -0
  26. data/lib/opensearch/api/actions/cat/repositories.rb +73 -0
  27. data/lib/opensearch/api/actions/cat/segments.rb +76 -0
  28. data/lib/opensearch/api/actions/cat/shards.rb +85 -0
  29. data/lib/opensearch/api/actions/cat/snapshots.rb +82 -0
  30. data/lib/opensearch/api/actions/cat/tasks.rb +77 -0
  31. data/lib/opensearch/api/actions/cat/templates.rb +80 -0
  32. data/lib/opensearch/api/actions/cat/thread_pool.rb +84 -0
  33. data/lib/opensearch/api/actions/clear_scroll.rb +62 -0
  34. data/lib/opensearch/api/actions/cluster/allocation_explain.rb +67 -0
  35. data/lib/opensearch/api/actions/cluster/delete_component_template.rb +68 -0
  36. data/lib/opensearch/api/actions/cluster/delete_voting_config_exclusions.rb +59 -0
  37. data/lib/opensearch/api/actions/cluster/exists_component_template.rb +70 -0
  38. data/lib/opensearch/api/actions/cluster/get_component_template.rb +70 -0
  39. data/lib/opensearch/api/actions/cluster/get_settings.rb +67 -0
  40. data/lib/opensearch/api/actions/cluster/health.rb +88 -0
  41. data/lib/opensearch/api/actions/cluster/params_registry.rb +69 -0
  42. data/lib/opensearch/api/actions/cluster/pending_tasks.rb +64 -0
  43. data/lib/opensearch/api/actions/cluster/post_voting_config_exclusions.rb +63 -0
  44. data/lib/opensearch/api/actions/cluster/put_component_template.rb +72 -0
  45. data/lib/opensearch/api/actions/cluster/put_settings.rb +68 -0
  46. data/{spec/unit/wrapper_gem_spec.rb → lib/opensearch/api/actions/cluster/remote_info.rb} +20 -17
  47. data/lib/opensearch/api/actions/cluster/reroute.rb +72 -0
  48. data/lib/opensearch/api/actions/cluster/state.rb +87 -0
  49. data/lib/opensearch/api/actions/cluster/stats.rb +68 -0
  50. data/lib/opensearch/api/actions/count.rb +96 -0
  51. data/lib/opensearch/api/actions/create.rb +60 -0
  52. data/lib/opensearch/api/actions/create_pit.rb +45 -0
  53. data/lib/opensearch/api/actions/dangling_indices/delete_dangling_index.rb +70 -0
  54. data/lib/opensearch/api/actions/dangling_indices/import_dangling_index.rb +69 -0
  55. data/lib/opensearch/api/actions/dangling_indices/list_dangling_indices.rb +51 -0
  56. data/lib/opensearch/api/actions/dangling_indices/params_registry.rb +69 -0
  57. data/lib/opensearch/api/actions/delete.rb +89 -0
  58. data/lib/opensearch/api/actions/delete_all_pits.rb +26 -0
  59. data/lib/opensearch/api/actions/delete_by_query.rb +133 -0
  60. data/lib/opensearch/api/actions/delete_by_query_rethrottle.rb +62 -0
  61. data/lib/opensearch/api/actions/delete_pit.rb +30 -0
  62. data/lib/opensearch/api/actions/delete_script.rb +66 -0
  63. data/lib/opensearch/api/actions/exists.rb +94 -0
  64. data/lib/opensearch/api/actions/exists_source.rb +89 -0
  65. data/lib/opensearch/api/actions/explain.rb +99 -0
  66. data/lib/opensearch/api/actions/features/get_features.rb +61 -0
  67. data/lib/opensearch/api/actions/features/params_registry.rb +69 -0
  68. data/lib/opensearch/api/actions/features/reset_features.rb +55 -0
  69. data/lib/opensearch/api/actions/field_caps.rb +78 -0
  70. data/lib/opensearch/api/actions/get.rb +93 -0
  71. data/lib/opensearch/api/actions/get_all_pits.rb +26 -0
  72. data/lib/opensearch/api/actions/get_script.rb +64 -0
  73. data/lib/opensearch/api/actions/get_script_context.rb +53 -0
  74. data/lib/opensearch/api/actions/get_script_languages.rb +53 -0
  75. data/lib/opensearch/api/actions/get_source.rb +87 -0
  76. data/lib/opensearch/api/actions/http/connect.rb +28 -0
  77. data/lib/opensearch/api/actions/http/delete.rb +28 -0
  78. data/lib/opensearch/api/actions/http/get.rb +28 -0
  79. data/lib/opensearch/api/actions/http/head.rb +28 -0
  80. data/lib/opensearch/api/actions/http/options.rb +28 -0
  81. data/lib/opensearch/api/actions/http/patch.rb +28 -0
  82. data/lib/opensearch/api/actions/http/post.rb +28 -0
  83. data/lib/opensearch/api/actions/http/put.rb +28 -0
  84. data/lib/opensearch/api/actions/http/request.rb +27 -0
  85. data/lib/opensearch/api/actions/http/trace.rb +28 -0
  86. data/lib/opensearch/api/actions/index.rb +96 -0
  87. data/lib/opensearch/api/actions/indices/add_block.rb +78 -0
  88. data/lib/opensearch/api/actions/indices/analyze.rb +71 -0
  89. data/lib/opensearch/api/actions/indices/clear_cache.rb +79 -0
  90. data/lib/opensearch/api/actions/indices/clone.rb +75 -0
  91. data/lib/opensearch/api/actions/indices/close.rb +76 -0
  92. data/lib/opensearch/api/actions/indices/create.rb +71 -0
  93. data/lib/opensearch/api/actions/indices/delete.rb +78 -0
  94. data/lib/opensearch/api/actions/indices/delete_alias.rb +72 -0
  95. data/lib/opensearch/api/actions/indices/delete_index_template.rb +68 -0
  96. data/lib/opensearch/api/actions/indices/delete_template.rb +72 -0
  97. data/lib/opensearch/api/actions/indices/disk_usage.rb +76 -0
  98. data/lib/opensearch/api/actions/indices/exists.rb +79 -0
  99. data/lib/opensearch/api/actions/indices/exists_alias.rb +82 -0
  100. data/lib/opensearch/api/actions/indices/exists_index_template.rb +72 -0
  101. data/lib/opensearch/api/actions/indices/exists_template.rb +75 -0
  102. data/lib/opensearch/api/actions/indices/field_usage_stats.rb +74 -0
  103. data/lib/opensearch/api/actions/indices/flush.rb +74 -0
  104. data/lib/opensearch/api/actions/indices/forcemerge.rb +76 -0
  105. data/lib/opensearch/api/actions/indices/get.rb +78 -0
  106. data/lib/opensearch/api/actions/indices/get_alias.rb +79 -0
  107. data/lib/opensearch/api/actions/indices/get_field_mapping.rb +83 -0
  108. data/lib/opensearch/api/actions/indices/get_index_template.rb +72 -0
  109. data/lib/opensearch/api/actions/indices/get_mapping.rb +81 -0
  110. data/lib/opensearch/api/actions/indices/get_settings.rb +87 -0
  111. data/lib/opensearch/api/actions/indices/get_template.rb +72 -0
  112. data/lib/opensearch/api/actions/indices/get_upgrade.rb +75 -0
  113. data/lib/opensearch/api/actions/indices/open.rb +76 -0
  114. data/lib/opensearch/api/actions/indices/params_registry.rb +69 -0
  115. data/lib/opensearch/api/actions/indices/put_alias.rb +73 -0
  116. data/lib/opensearch/api/actions/indices/put_index_template.rb +72 -0
  117. data/lib/opensearch/api/actions/indices/put_mapping.rb +82 -0
  118. data/lib/opensearch/api/actions/indices/put_settings.rb +83 -0
  119. data/lib/opensearch/api/actions/indices/put_template.rb +72 -0
  120. data/lib/opensearch/api/actions/indices/recovery.rb +68 -0
  121. data/lib/opensearch/api/actions/indices/refresh.rb +70 -0
  122. data/lib/opensearch/api/actions/indices/resolve_index.rb +68 -0
  123. data/lib/opensearch/api/actions/indices/rollover.rb +81 -0
  124. data/lib/opensearch/api/actions/indices/segments.rb +72 -0
  125. data/lib/opensearch/api/actions/indices/shard_stores.rb +72 -0
  126. data/lib/opensearch/api/actions/indices/shrink.rb +77 -0
  127. data/lib/opensearch/api/actions/indices/simulate_index_template.rb +71 -0
  128. data/lib/opensearch/api/actions/indices/simulate_template.rb +73 -0
  129. data/lib/opensearch/api/actions/indices/split.rb +77 -0
  130. data/lib/opensearch/api/actions/indices/stats.rb +100 -0
  131. data/lib/opensearch/api/actions/indices/update_aliases.rb +66 -0
  132. data/lib/opensearch/api/actions/indices/upgrade.rb +79 -0
  133. data/lib/opensearch/api/actions/indices/validate_query.rb +99 -0
  134. data/{Gemfile → lib/opensearch/api/actions/info.rb} +19 -8
  135. data/lib/opensearch/api/actions/ingest/delete_pipeline.rb +68 -0
  136. data/lib/opensearch/api/actions/ingest/geo_ip_stats.rb +51 -0
  137. data/lib/opensearch/api/actions/ingest/get_pipeline.rb +70 -0
  138. data/lib/opensearch/api/actions/ingest/params_registry.rb +69 -0
  139. data/lib/opensearch/api/actions/ingest/processor_grok.rb +51 -0
  140. data/lib/opensearch/api/actions/ingest/put_pipeline.rb +70 -0
  141. data/lib/opensearch/api/actions/ingest/simulate.rb +69 -0
  142. data/lib/opensearch/api/actions/mget.rb +86 -0
  143. data/lib/opensearch/api/actions/msearch.rb +105 -0
  144. data/lib/opensearch/api/actions/msearch_template.rb +89 -0
  145. data/lib/opensearch/api/actions/mtermvectors.rb +102 -0
  146. data/lib/opensearch/api/actions/nodes/hot_threads.rb +81 -0
  147. data/lib/opensearch/api/actions/nodes/info.rb +75 -0
  148. data/lib/opensearch/api/actions/nodes/params_registry.rb +69 -0
  149. data/lib/opensearch/api/actions/nodes/reload_secure_settings.rb +67 -0
  150. data/lib/opensearch/api/actions/nodes/shutdown.rb +65 -0
  151. data/lib/opensearch/api/actions/nodes/stats.rb +96 -0
  152. data/lib/opensearch/api/actions/nodes/usage.rb +73 -0
  153. data/lib/opensearch/api/actions/params_registry.rb +67 -0
  154. data/lib/opensearch/api/actions/ping.rb +54 -0
  155. data/lib/opensearch/api/actions/put_script.rb +76 -0
  156. data/lib/opensearch/api/actions/rank_eval.rb +77 -0
  157. data/lib/opensearch/api/actions/reindex.rb +76 -0
  158. data/lib/opensearch/api/actions/reindex_rethrottle.rb +62 -0
  159. data/{spec/integration/security_disabled/validation_integration_spec.rb → lib/opensearch/api/actions/remote/info.rb} +17 -11
  160. data/lib/opensearch/api/actions/remote_store/restore.rb +43 -0
  161. data/lib/opensearch/api/actions/render_search_template.rb +62 -0
  162. data/lib/opensearch/api/actions/scripts_painless_execute.rb +59 -0
  163. data/lib/opensearch/api/actions/scroll.rb +78 -0
  164. data/lib/opensearch/api/actions/search.rb +161 -0
  165. data/lib/opensearch/api/actions/search_shards.rb +74 -0
  166. data/lib/opensearch/api/actions/search_template.rb +96 -0
  167. data/lib/opensearch/api/actions/security/change_password.rb +39 -0
  168. data/lib/opensearch/api/actions/security/create_action_group.rb +42 -0
  169. data/lib/opensearch/api/actions/security/create_role.rb +43 -0
  170. data/lib/opensearch/api/actions/security/create_role_mapping.rb +43 -0
  171. data/lib/opensearch/api/actions/security/create_tenant.rb +42 -0
  172. data/lib/opensearch/api/actions/security/create_user.rb +43 -0
  173. data/lib/opensearch/api/actions/security/delete_action_group.rb +41 -0
  174. data/lib/opensearch/api/actions/security/delete_distinguished_names.rb +41 -0
  175. data/lib/opensearch/api/actions/security/delete_role.rb +41 -0
  176. data/lib/opensearch/api/actions/security/delete_role_mapping.rb +41 -0
  177. data/lib/opensearch/api/actions/security/delete_tenant.rb +41 -0
  178. data/lib/opensearch/api/actions/security/delete_user.rb +41 -0
  179. data/lib/opensearch/api/actions/security/flush_cache.rb +36 -0
  180. data/lib/opensearch/api/actions/security/get_account_details.rb +36 -0
  181. data/lib/opensearch/api/actions/security/get_action_group.rb +41 -0
  182. data/lib/opensearch/api/actions/security/get_action_groups.rb +36 -0
  183. data/lib/opensearch/api/actions/security/get_audit_configuration.rb +36 -0
  184. data/lib/opensearch/api/actions/security/get_certificates.rb +36 -0
  185. data/lib/opensearch/api/actions/security/get_configuration.rb +36 -0
  186. data/lib/opensearch/api/actions/security/get_distinguished_names.rb +39 -0
  187. data/lib/opensearch/api/actions/security/get_role.rb +41 -0
  188. data/lib/opensearch/api/actions/security/get_role_mapping.rb +41 -0
  189. data/lib/opensearch/api/actions/security/get_role_mappings.rb +36 -0
  190. data/lib/opensearch/api/actions/security/get_roles.rb +36 -0
  191. data/lib/opensearch/api/actions/security/get_tenant.rb +41 -0
  192. data/lib/opensearch/api/actions/security/get_tenants.rb +36 -0
  193. data/lib/opensearch/api/actions/security/get_user.rb +41 -0
  194. data/lib/opensearch/api/actions/security/get_users.rb +36 -0
  195. data/lib/opensearch/api/actions/security/health.rb +36 -0
  196. data/lib/opensearch/api/actions/security/patch_action_group.rb +42 -0
  197. data/lib/opensearch/api/actions/security/patch_action_groups.rb +37 -0
  198. data/lib/opensearch/api/actions/security/patch_audit_configuration.rb +39 -0
  199. data/lib/opensearch/api/actions/security/patch_configuration.rb +39 -0
  200. data/lib/opensearch/api/actions/security/patch_distinguished_names.rb +39 -0
  201. data/lib/opensearch/api/actions/security/patch_role.rb +43 -0
  202. data/lib/opensearch/api/actions/security/patch_role_mapping.rb +43 -0
  203. data/lib/opensearch/api/actions/security/patch_role_mappings.rb +39 -0
  204. data/lib/opensearch/api/actions/security/patch_roles.rb +39 -0
  205. data/lib/opensearch/api/actions/security/patch_tenant.rb +43 -0
  206. data/lib/opensearch/api/actions/security/patch_tenants.rb +39 -0
  207. data/lib/opensearch/api/actions/security/patch_user.rb +43 -0
  208. data/lib/opensearch/api/actions/security/patch_users.rb +39 -0
  209. data/lib/opensearch/api/actions/security/reload_http_certificates.rb +36 -0
  210. data/lib/opensearch/api/actions/security/reload_transport_certificates.rb +36 -0
  211. data/lib/opensearch/api/actions/security/update_audit_configuration.rb +39 -0
  212. data/lib/opensearch/api/actions/security/update_configuration.rb +39 -0
  213. data/lib/opensearch/api/actions/security/update_distinguished_names.rb +42 -0
  214. data/lib/opensearch/api/actions/shutdown/delete_node.rb +60 -0
  215. data/lib/opensearch/api/actions/shutdown/get_node.rb +62 -0
  216. data/lib/opensearch/api/actions/shutdown/params_registry.rb +69 -0
  217. data/lib/opensearch/api/actions/shutdown/put_node.rb +62 -0
  218. data/lib/opensearch/api/actions/snapshot/cleanup_repository.rb +68 -0
  219. data/lib/opensearch/api/actions/snapshot/clone.rb +76 -0
  220. data/lib/opensearch/api/actions/snapshot/create.rb +73 -0
  221. data/lib/opensearch/api/actions/snapshot/create_repository.rb +72 -0
  222. data/lib/opensearch/api/actions/snapshot/delete.rb +74 -0
  223. data/lib/opensearch/api/actions/snapshot/delete_repository.rb +72 -0
  224. data/lib/opensearch/api/actions/snapshot/get.rb +82 -0
  225. data/lib/opensearch/api/actions/snapshot/get_features.rb +61 -0
  226. data/lib/opensearch/api/actions/snapshot/get_repository.rb +73 -0
  227. data/lib/opensearch/api/actions/snapshot/params_registry.rb +69 -0
  228. data/lib/opensearch/api/actions/snapshot/repository_analyze.rb +84 -0
  229. data/lib/opensearch/api/actions/snapshot/restore.rb +73 -0
  230. data/lib/opensearch/api/actions/snapshot/status.rb +79 -0
  231. data/lib/opensearch/api/actions/snapshot/verify_repository.rb +68 -0
  232. data/lib/opensearch/api/actions/tasks/cancel.rb +76 -0
  233. data/lib/opensearch/api/actions/tasks/get.rb +68 -0
  234. data/lib/opensearch/api/actions/tasks/list.rb +75 -0
  235. data/lib/opensearch/api/actions/tasks/params_registry.rb +69 -0
  236. data/lib/opensearch/api/actions/termvectors.rb +108 -0
  237. data/lib/opensearch/api/actions/update.rb +99 -0
  238. data/lib/opensearch/api/actions/update_by_query.rb +137 -0
  239. data/lib/opensearch/api/actions/update_by_query_rethrottle.rb +62 -0
  240. data/{spec/integration/security_enabled/validation_integration_spec.rb → lib/opensearch/api/namespace/cat.rb} +19 -12
  241. data/lib/opensearch/api/namespace/cluster.rb +47 -0
  242. data/lib/opensearch/api/namespace/common.rb +72 -0
  243. data/lib/opensearch/api/namespace/dangling_indices.rb +47 -0
  244. data/lib/opensearch/api/namespace/features.rb +47 -0
  245. data/lib/opensearch/api/namespace/http.rb +30 -0
  246. data/lib/opensearch/api/namespace/indices.rb +47 -0
  247. data/lib/opensearch/api/namespace/ingest.rb +47 -0
  248. data/lib/opensearch/api/namespace/nodes.rb +47 -0
  249. data/lib/opensearch/api/namespace/remote.rb +47 -0
  250. data/lib/opensearch/api/namespace/remote_store.rb +30 -0
  251. data/lib/opensearch/api/namespace/security.rb +30 -0
  252. data/lib/opensearch/api/namespace/shutdown.rb +47 -0
  253. data/lib/opensearch/api/namespace/snapshot.rb +47 -0
  254. data/lib/opensearch/api/namespace/tasks.rb +47 -0
  255. data/lib/opensearch/api/utils.rb +296 -0
  256. data/lib/opensearch/api.rb +104 -0
  257. data/lib/opensearch/dsl/search/aggregation.rb +112 -0
  258. data/lib/opensearch/dsl/search/aggregations/avg.rb +49 -0
  259. data/lib/opensearch/dsl/search/aggregations/cardinality.rb +56 -0
  260. data/lib/opensearch/dsl/search/aggregations/children.rb +63 -0
  261. data/lib/opensearch/dsl/search/aggregations/composite.rb +68 -0
  262. data/lib/opensearch/dsl/search/aggregations/date_histogram.rb +64 -0
  263. data/lib/opensearch/dsl/search/aggregations/date_range.rb +59 -0
  264. data/lib/opensearch/dsl/search/aggregations/extended_stats.rb +48 -0
  265. data/lib/opensearch/dsl/search/aggregations/filter.rb +54 -0
  266. data/lib/opensearch/dsl/search/aggregations/filters.rb +59 -0
  267. data/lib/opensearch/dsl/search/aggregations/geo_bounds.rb +68 -0
  268. data/lib/opensearch/dsl/search/aggregations/geo_distance.rb +63 -0
  269. data/lib/opensearch/dsl/search/aggregations/geohash_grid.rb +59 -0
  270. data/lib/opensearch/dsl/search/aggregations/global.rb +52 -0
  271. data/{spec/integration/security_disabled/client_integration_spec.rb → lib/opensearch/dsl/search/aggregations/histogram.rb} +29 -29
  272. data/lib/opensearch/dsl/search/aggregations/ip_range.rb +55 -0
  273. data/lib/opensearch/dsl/search/aggregations/max.rb +49 -0
  274. data/lib/opensearch/dsl/search/aggregations/min.rb +49 -0
  275. data/lib/opensearch/dsl/search/aggregations/missing.rb +59 -0
  276. data/lib/opensearch/dsl/search/aggregations/nested.rb +57 -0
  277. data/lib/opensearch/dsl/search/aggregations/percentile_ranks.rb +58 -0
  278. data/lib/opensearch/dsl/search/aggregations/percentiles.rb +57 -0
  279. data/lib/opensearch/dsl/search/aggregations/pipeline/avg_bucket.rb +58 -0
  280. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_script.rb +60 -0
  281. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_selector.rb +59 -0
  282. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_sort.rb +111 -0
  283. data/lib/opensearch/dsl/search/aggregations/pipeline/cumulative_sum.rb +57 -0
  284. data/lib/opensearch/dsl/search/aggregations/pipeline/derivative.rb +58 -0
  285. data/lib/opensearch/dsl/search/aggregations/pipeline/extended_stats_bucket.rb +58 -0
  286. data/lib/opensearch/dsl/search/aggregations/pipeline/max_bucket.rb +58 -0
  287. data/lib/opensearch/dsl/search/aggregations/pipeline/min_bucket.rb +58 -0
  288. data/lib/opensearch/dsl/search/aggregations/pipeline/moving_avg.rb +66 -0
  289. data/lib/opensearch/dsl/search/aggregations/pipeline/percentiles_bucket.rb +60 -0
  290. data/lib/opensearch/dsl/search/aggregations/pipeline/serial_diff.rb +60 -0
  291. data/lib/opensearch/dsl/search/aggregations/pipeline/stats_bucket.rb +58 -0
  292. data/lib/opensearch/dsl/search/aggregations/pipeline/sum_bucket.rb +58 -0
  293. data/lib/opensearch/dsl/search/aggregations/range.rb +77 -0
  294. data/lib/opensearch/dsl/search/aggregations/reverse_nested.rb +61 -0
  295. data/lib/opensearch/dsl/search/aggregations/scripted_metric.rb +63 -0
  296. data/lib/opensearch/dsl/search/aggregations/significant_terms.rb +69 -0
  297. data/lib/opensearch/dsl/search/aggregations/stats.rb +61 -0
  298. data/lib/opensearch/dsl/search/aggregations/sum.rb +49 -0
  299. data/lib/opensearch/dsl/search/aggregations/terms.rb +66 -0
  300. data/lib/opensearch/dsl/search/aggregations/top_hits.rb +59 -0
  301. data/lib/opensearch/dsl/search/aggregations/value_count.rb +49 -0
  302. data/lib/opensearch/dsl/search/base_aggregation_component.rb +83 -0
  303. data/lib/opensearch/dsl/search/base_component.rb +191 -0
  304. data/lib/opensearch/dsl/search/base_compound_filter_component.rb +124 -0
  305. data/lib/opensearch/dsl/search/filter.rb +82 -0
  306. data/lib/opensearch/dsl/search/filters/and.rb +70 -0
  307. data/lib/opensearch/dsl/search/filters/bool.rb +103 -0
  308. data/lib/opensearch/dsl/search/filters/exists.rb +56 -0
  309. data/lib/opensearch/dsl/search/filters/geo_bounding_box.rb +69 -0
  310. data/lib/opensearch/dsl/search/filters/geo_distance.rb +81 -0
  311. data/lib/opensearch/dsl/search/filters/geo_distance_range.rb +56 -0
  312. data/lib/opensearch/dsl/search/filters/geo_polygon.rb +65 -0
  313. data/lib/opensearch/dsl/search/filters/geo_shape.rb +59 -0
  314. data/lib/opensearch/dsl/search/filters/geohash_cell.rb +71 -0
  315. data/lib/opensearch/dsl/search/filters/has_child.rb +98 -0
  316. data/lib/opensearch/dsl/search/filters/has_parent.rb +97 -0
  317. data/lib/opensearch/dsl/search/filters/ids.rb +56 -0
  318. data/lib/opensearch/dsl/search/filters/indices.rb +101 -0
  319. data/lib/opensearch/dsl/search/filters/limit.rb +55 -0
  320. data/lib/opensearch/dsl/search/filters/match_all.rb +52 -0
  321. data/lib/opensearch/dsl/search/filters/missing.rb +58 -0
  322. data/lib/opensearch/dsl/search/filters/nested.rb +91 -0
  323. data/lib/opensearch/dsl/search/filters/not.rb +98 -0
  324. data/lib/opensearch/dsl/search/filters/or.rb +70 -0
  325. data/lib/opensearch/dsl/search/filters/prefix.rb +53 -0
  326. data/lib/opensearch/dsl/search/filters/query.rb +77 -0
  327. data/lib/opensearch/dsl/search/filters/range.rb +63 -0
  328. data/lib/opensearch/dsl/search/filters/regexp.rb +58 -0
  329. data/lib/opensearch/dsl/search/filters/script.rb +56 -0
  330. data/lib/opensearch/dsl/search/filters/term.rb +55 -0
  331. data/lib/opensearch/dsl/search/filters/terms.rb +56 -0
  332. data/lib/opensearch/dsl/search/filters/type.rb +58 -0
  333. data/lib/opensearch/dsl/search/highlight.rb +117 -0
  334. data/lib/opensearch/dsl/search/options.rb +80 -0
  335. data/lib/opensearch/dsl/search/queries/bool.rb +110 -0
  336. data/lib/opensearch/dsl/search/queries/boosting.rb +57 -0
  337. data/lib/opensearch/dsl/search/queries/common.rb +62 -0
  338. data/lib/opensearch/dsl/search/queries/constant_score.rb +90 -0
  339. data/lib/opensearch/dsl/search/queries/dis_max.rb +59 -0
  340. data/lib/opensearch/dsl/search/queries/exists.rb +68 -0
  341. data/lib/opensearch/dsl/search/queries/filtered.rb +101 -0
  342. data/lib/opensearch/dsl/search/queries/function_score.rb +122 -0
  343. data/lib/opensearch/dsl/search/queries/fuzzy.rb +69 -0
  344. data/lib/opensearch/dsl/search/queries/fuzzy_like_this.rb +61 -0
  345. data/lib/opensearch/dsl/search/queries/fuzzy_like_this_field.rb +60 -0
  346. data/lib/opensearch/dsl/search/queries/geo_shape.rb +54 -0
  347. data/lib/opensearch/dsl/search/queries/has_child.rb +82 -0
  348. data/lib/opensearch/dsl/search/queries/has_parent.rb +82 -0
  349. data/lib/opensearch/dsl/search/queries/ids.rb +52 -0
  350. data/lib/opensearch/dsl/search/queries/indices.rb +58 -0
  351. data/lib/opensearch/dsl/search/queries/match.rb +66 -0
  352. data/lib/opensearch/dsl/search/queries/match_all.rb +50 -0
  353. data/lib/opensearch/dsl/search/queries/match_phrase.rb +56 -0
  354. data/lib/opensearch/dsl/search/queries/match_phrase_prefix.rb +55 -0
  355. data/lib/opensearch/dsl/search/queries/more_like_this.rb +88 -0
  356. data/lib/opensearch/dsl/search/queries/multi_match.rb +69 -0
  357. data/lib/opensearch/dsl/search/queries/nested.rb +80 -0
  358. data/lib/opensearch/dsl/search/queries/prefix.rb +54 -0
  359. data/lib/opensearch/dsl/search/queries/query_string.rb +75 -0
  360. data/lib/opensearch/dsl/search/queries/range.rb +71 -0
  361. data/lib/opensearch/dsl/search/queries/regexp.rb +55 -0
  362. data/lib/opensearch/dsl/search/queries/script_score.rb +62 -0
  363. data/lib/opensearch/dsl/search/queries/simple_query_string.rb +64 -0
  364. data/lib/opensearch/dsl/search/queries/span_first.rb +52 -0
  365. data/lib/opensearch/dsl/search/queries/span_multi.rb +52 -0
  366. data/lib/opensearch/dsl/search/queries/span_near.rb +56 -0
  367. data/lib/opensearch/dsl/search/queries/span_not.rb +57 -0
  368. data/lib/opensearch/dsl/search/queries/span_or.rb +52 -0
  369. data/lib/opensearch/dsl/search/queries/span_term.rb +50 -0
  370. data/lib/opensearch/dsl/search/queries/template.rb +55 -0
  371. data/lib/opensearch/dsl/search/queries/term.rb +50 -0
  372. data/lib/opensearch/dsl/search/queries/terms.rb +51 -0
  373. data/lib/opensearch/dsl/search/queries/top_children.rb +82 -0
  374. data/lib/opensearch/dsl/search/queries/wildcard.rb +54 -0
  375. data/lib/opensearch/dsl/search/query.rb +82 -0
  376. data/lib/opensearch/dsl/search/sort.rb +83 -0
  377. data/lib/opensearch/dsl/search/suggest.rb +52 -0
  378. data/lib/opensearch/dsl/search.rb +282 -0
  379. data/lib/opensearch/dsl/utils.rb +49 -0
  380. data/lib/opensearch/dsl.rb +69 -0
  381. data/lib/opensearch/transport/client.rb +362 -0
  382. data/lib/opensearch/transport/redacted.rb +82 -0
  383. data/lib/opensearch/transport/transport/base.rb +451 -0
  384. data/lib/opensearch/transport/transport/connections/collection.rb +134 -0
  385. data/lib/opensearch/transport/transport/connections/connection.rb +168 -0
  386. data/lib/opensearch/transport/transport/connections/selector.rb +100 -0
  387. data/lib/opensearch/transport/transport/errors.rb +97 -0
  388. data/lib/opensearch/transport/transport/http/curb.rb +139 -0
  389. data/lib/opensearch/transport/transport/http/faraday.rb +101 -0
  390. data/lib/opensearch/transport/transport/http/manticore.rb +188 -0
  391. data/lib/opensearch/transport/transport/loggable.rb +92 -0
  392. data/lib/opensearch/transport/transport/response.rb +47 -0
  393. data/lib/opensearch/transport/transport/serializer/multi_json.rb +61 -0
  394. data/lib/opensearch/transport/transport/sniffer.rb +110 -0
  395. data/lib/opensearch/transport.rb +44 -0
  396. data/lib/opensearch/version.rb +1 -1
  397. data/lib/opensearch-dsl.rb +27 -0
  398. data/lib/opensearch.rb +12 -12
  399. data/opensearch-ruby.gemspec +69 -0
  400. data/spec/spec_helper.rb +95 -4
  401. data/test/dsl/integration/search_aggregation_children_test.rb +91 -0
  402. data/test/dsl/integration/search_aggregation_geo_test.rb +112 -0
  403. data/test/dsl/integration/search_aggregation_nested_test.rb +129 -0
  404. data/test/dsl/integration/search_aggregations_test.rb +288 -0
  405. data/test/dsl/integration/search_filters_test.rb +290 -0
  406. data/test/dsl/integration/search_options_test.rb +54 -0
  407. data/test/dsl/integration/search_query_test.rb +98 -0
  408. data/test/dsl/integration/search_size_from_test.rb +71 -0
  409. data/test/dsl/integration/search_sort_test.rb +57 -0
  410. data/test/dsl/integration/search_suggest_test.rb +107 -0
  411. data/test/dsl/integration/search_test.rb +81 -0
  412. data/test/dsl/test_helper.rb +95 -0
  413. data/test/dsl/unit/dsl_test.rb +44 -0
  414. data/test/dsl/unit/search_aggregation_test.rb +96 -0
  415. data/test/dsl/unit/search_base_aggregation_component_test.rb +66 -0
  416. data/test/dsl/unit/search_base_component_test.rb +210 -0
  417. data/test/dsl/unit/search_filter_test.rb +84 -0
  418. data/test/dsl/unit/search_highlight_test.rb +103 -0
  419. data/test/dsl/unit/search_options_test.rb +114 -0
  420. data/test/dsl/unit/search_query_test.rb +88 -0
  421. data/test/dsl/unit/search_size_from_test.rb +68 -0
  422. data/test/dsl/unit/search_sort_test.rb +91 -0
  423. data/test/dsl/unit/search_suggest_test.rb +46 -0
  424. data/test/dsl/unit/search_test.rb +268 -0
  425. data/test/dsl/unit/utils_test.rb +47 -0
  426. data/test/transport/integration/transport_test.rb +117 -0
  427. data/test/transport/profile/client_benchmark_test.rb +141 -0
  428. data/test/transport/test_helper.rb +97 -0
  429. data/test/transport/unit/connection_test.rb +145 -0
  430. data/test/transport/unit/response_test.rb +46 -0
  431. data/test/transport/unit/serializer_test.rb +42 -0
  432. data/test/transport/unit/transport_base_test.rb +673 -0
  433. data/test/transport/unit/transport_curb_test.rb +143 -0
  434. data/test/transport/unit/transport_faraday_test.rb +237 -0
  435. data/test/transport/unit/transport_manticore_test.rb +191 -0
  436. data.tar.gz.sig +0 -0
  437. metadata +502 -191
  438. metadata.gz.sig +0 -0
  439. data/.gitignore +0 -21
  440. data/Rakefile +0 -69
  441. data/opensearch.gemspec +0 -81
  442. data/spec/integration/security_enabled/client_integration_spec.rb +0 -43
  443. data/spec/unit/opensearch_product_validation_spec.rb +0 -198
  444. /data/{LICENSE → LICENSE.txt} +0 -0
@@ -0,0 +1,288 @@
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_relative '../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',
207
+ response['aggregations']['tags']['buckets'][0]['top_hits']['hits']['hits'][0]['_source']['title']
208
+ end
209
+
210
+ should 'calculate clicks for a tag' do
211
+ response = @client.search index: 'test', body: search {
212
+ aggregation :clicks_for_one do
213
+ scripted_metric do
214
+ init_script 'state.transactions = []'
215
+ map_script "if (doc['tags'].value.contains('one')) { state.transactions.add(doc['clicks'].value) }"
216
+ combine_script 'double sum = 0; for (t in state.transactions) { sum += t } return sum'
217
+ reduce_script 'double sum = 0; for (a in states) { sum += a } return sum'
218
+ end
219
+ end
220
+ }.to_hash
221
+
222
+ assert_equal 40, response['aggregations']['clicks_for_one']['value']
223
+ end
224
+
225
+ should 'limit the scope with a filter' do
226
+ response = @client.search index: 'test', body: search {
227
+ aggregation :clicks_for_one do
228
+ filter terms: { tags: ['one'] } do
229
+ aggregation :sum_clicks do
230
+ sum field: 'clicks'
231
+ end
232
+ end
233
+ end
234
+ }.to_hash
235
+
236
+ assert_equal 40, response['aggregations']['clicks_for_one']['sum_clicks']['value']
237
+ end
238
+ end
239
+
240
+ should 'return aggregations for multiple filters' do
241
+ response = @client.search index: 'test', body: search {
242
+ aggregation :avg_clicks_per_tag do
243
+ filters do
244
+ filters one: { terms: { tags: ['one'] } },
245
+ two: { terms: { tags: ['two'] } }
246
+ aggregation :avg do
247
+ avg field: 'clicks'
248
+ end
249
+ end
250
+ end
251
+ }.to_hash
252
+
253
+ assert_equal 13, response['aggregations']['avg_clicks_per_tag']['buckets']['one']['avg']['value'].to_i
254
+ assert_equal 15, response['aggregations']['avg_clicks_per_tag']['buckets']['two']['avg']['value'].to_i
255
+ end
256
+
257
+ should 'return a histogram on clicks' do
258
+ response = @client.search index: 'test', body: search {
259
+ aggregation :clicks_histogram do
260
+ histogram do
261
+ field 'clicks'
262
+ interval 10
263
+ end
264
+ end
265
+ }.to_hash
266
+
267
+ assert_equal 3, response['aggregations']['clicks_histogram']['buckets'].size
268
+ assert_equal 10, response['aggregations']['clicks_histogram']['buckets'][1]['key']
269
+ assert_equal 1, response['aggregations']['clicks_histogram']['buckets'][1]['doc_count']
270
+ end
271
+
272
+ should 'return a histogram with empty buckets on clicks' do
273
+ response = @client.search index: 'test', body: search {
274
+ aggregation :clicks_histogram do
275
+ histogram do
276
+ field 'clicks'
277
+ interval 2
278
+ min_doc_count 0
279
+ end
280
+ end
281
+ }.to_hash
282
+
283
+ assert_equal 9, response['aggregations']['clicks_histogram']['buckets'].size
284
+ end
285
+ end
286
+ end
287
+ end
288
+ end
@@ -0,0 +1,290 @@
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
+ # encoding: UTF-8
28
+
29
+ require_relative '../test_helper'
30
+
31
+ module OpenSearch
32
+ module Test
33
+ class FiltersIntegrationTest < ::OpenSearch::Test::IntegrationTestCase
34
+ include OpenSearch::DSL::Search
35
+
36
+ context 'Filters integration' do
37
+ setup do
38
+ @client.indices.create index: 'test'
39
+ @client.index index: 'test', id: 1,
40
+ body: { name: 'Original',
41
+ color: 'red',
42
+ size: 'xxl',
43
+ category: 'unisex',
44
+ manufacturer: 'a' }
45
+
46
+ @client.index index: 'test', id: 2,
47
+ body: { name: 'Original',
48
+ color: 'red',
49
+ size: 'xl',
50
+ category: 'unisex',
51
+ manufacturer: 'a' }
52
+
53
+ @client.index index: 'test', id: 3,
54
+ body: { name: 'Original',
55
+ color: 'red',
56
+ size: 'l',
57
+ category: 'unisex',
58
+ manufacturer: 'a' }
59
+
60
+ @client.index index: 'test', id: 4,
61
+ body: { name: 'Western',
62
+ color: 'red',
63
+ size: 'm',
64
+ category: 'men',
65
+ manufacturer: 'c' }
66
+
67
+ @client.index index: 'test', id: 5,
68
+ body: { name: 'Modern',
69
+ color: 'grey',
70
+ size: 'l',
71
+ category: 'men',
72
+ manufacturer: 'b' }
73
+
74
+ @client.index index: 'test', id: 6,
75
+ body: { name: 'Modern',
76
+ color: 'grey',
77
+ size: 's',
78
+ category: 'men',
79
+ manufacturer: 'b' }
80
+
81
+ @client.index index: 'test', id: 7,
82
+ body: { name: 'Modern',
83
+ color: 'grey',
84
+ size: 's',
85
+ category: 'women',
86
+ manufacturer: 'b' }
87
+
88
+ @client.indices.refresh index: 'test'
89
+ end
90
+
91
+ context 'term filter' do
92
+ should 'return matching documents' do
93
+ response = @client.search index: 'test', body: search {
94
+ query do
95
+ bool do
96
+ filter do
97
+ term color: 'red'
98
+ end
99
+ end
100
+ end
101
+ }.to_hash
102
+
103
+ assert_equal 4, response['hits']['total']['value']
104
+ assert response['hits']['hits'].all? { |h| h['_source']['color'] == 'red' }, response.inspect
105
+ end
106
+ end
107
+
108
+ context 'terms filter' do
109
+ should 'return matching documents' do
110
+ response = @client.search index: 'test', body: search {
111
+ query do
112
+ bool do
113
+ filter do
114
+ terms color: %w[red grey gold]
115
+ end
116
+ end
117
+ end
118
+ }.to_hash
119
+
120
+ assert_equal 7, response['hits']['total']['value']
121
+ end
122
+ end
123
+
124
+ context 'bool filter' do
125
+ should 'return correct documents' do
126
+ response = @client.search index: 'test', body: search {
127
+ query do
128
+ bool do
129
+ filter do
130
+ bool do
131
+ must do
132
+ term size: 'l'
133
+ end
134
+
135
+ should do
136
+ term color: 'red'
137
+ end
138
+
139
+ should do
140
+ term category: 'men'
141
+ end
142
+
143
+ must_not do
144
+ term manufacturer: 'b'
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+ }.to_hash
151
+
152
+ assert_equal 1, response['hits']['hits'].size
153
+ assert_equal '3', response['hits']['hits'][0]['_id'].to_s
154
+ end
155
+ end
156
+
157
+ context 'geographical filters' do
158
+ setup do
159
+ @client.indices.create index: 'places', body: {
160
+ mappings: {
161
+ properties: {
162
+ location: {
163
+ type: 'geo_point'
164
+ }
165
+ }
166
+ }
167
+ }
168
+ @client.index index: 'places', id: 1,
169
+ body: { name: 'Vyšehrad',
170
+ location: '50.064399, 14.420018' }
171
+
172
+ @client.index index: 'places', id: 2,
173
+ body: { name: 'Karlštejn',
174
+ location: '49.939518, 14.188046' }
175
+
176
+ @client.indices.refresh index: 'places'
177
+ end
178
+
179
+ should 'find documents within the bounding box' do
180
+ response = @client.search index: 'places', body: search {
181
+ query do
182
+ bool do
183
+ filter do
184
+ geo_bounding_box :location do
185
+ top_right '50.1815123678,14.7149200439'
186
+ bottom_left '49.9415476869,14.2162566185'
187
+ end
188
+ end
189
+ end
190
+ end
191
+ }.to_hash
192
+
193
+ assert_equal 1, response['hits']['hits'].size
194
+ assert_equal 'Vyšehrad', response['hits']['hits'][0]['_source']['name']
195
+ end
196
+
197
+ should 'find documents within the distance specified with a hash' do
198
+ response = @client.search index: 'places', body: search {
199
+ query do
200
+ bool do
201
+ filter do
202
+ geo_distance location: '50.090223,14.399590', distance: '5km'
203
+ end
204
+ end
205
+ end
206
+ }.to_hash
207
+
208
+ assert_equal 1, response['hits']['hits'].size
209
+ assert_equal 'Vyšehrad', response['hits']['hits'][0]['_source']['name']
210
+ end
211
+
212
+ should 'find documents within the distance specified with a block' do
213
+ response = @client.search index: 'places', body: search {
214
+ query do
215
+ bool do
216
+ filter do
217
+ geo_distance :location do
218
+ lat '50.090223'
219
+ lon '14.399590'
220
+ distance '5km'
221
+ end
222
+ end
223
+ end
224
+ end
225
+ }.to_hash
226
+
227
+ assert_equal 1, response['hits']['hits'].size
228
+ assert_equal 'Vyšehrad', response['hits']['hits'][0]['_source']['name']
229
+ end
230
+
231
+ should 'find documents within the geographical distance range' do
232
+ response = @client.search index: 'places', body: search {
233
+ query do
234
+ bool do
235
+ filter do
236
+ geo_distance location: { lat: '50.090223', lon: '14.399590' },
237
+ distance: '50km'
238
+ end
239
+ end
240
+ end
241
+ aggregation :distance_ranges do
242
+ geo_distance do
243
+ field :location
244
+ origin '50.090223,14.399590'
245
+ unit 'km'
246
+ ranges [{ from: 10, to: 50 }]
247
+
248
+ aggregation :results do
249
+ top_hits _source: { include: 'name' }
250
+ end
251
+ end
252
+ end
253
+ }.to_hash
254
+
255
+ assert_equal 2, response['hits']['hits'].size
256
+
257
+ bucket = response['aggregations']['distance_ranges']['buckets'][0]
258
+
259
+ assert_equal 1, bucket['doc_count']
260
+ assert_equal 1, bucket['results']['hits']['hits'].size
261
+ assert_equal 'Karlštejn', bucket['results']['hits']['hits'][0]['_source']['name']
262
+ end
263
+
264
+ should 'find documents within the polygon' do
265
+ response = @client.search index: 'places', body: search {
266
+ query do
267
+ bool do
268
+ filter do
269
+ geo_polygon :location do
270
+ points [
271
+ [14.2244355, 49.9419006],
272
+ [14.2244355, 50.1774301],
273
+ [14.7067869, 50.1774301],
274
+ [14.7067869, 49.9419006],
275
+ [14.2244355, 49.9419006]
276
+ ]
277
+ end
278
+ end
279
+ end
280
+ end
281
+ }.to_hash
282
+
283
+ assert_equal 1, response['hits']['hits'].size
284
+ assert_equal 'Vyšehrad', response['hits']['hits'][0]['_source']['name']
285
+ end
286
+ end
287
+ end
288
+ end
289
+ end
290
+ end
@@ -0,0 +1,54 @@
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_relative '../test_helper'
28
+
29
+ module OpenSearch
30
+ module Test
31
+ class SearchOptionsIntegrationTest < ::OpenSearch::Test::IntegrationTestCase
32
+ include OpenSearch::DSL::Search
33
+
34
+ context 'Search options' do
35
+ setup do
36
+ @client.indices.create index: 'test'
37
+ @client.index index: 'test', id: '1', body: { title: 'Test' }
38
+ @client.index index: 'test', id: '2', body: { title: 'Rest' }
39
+ @client.indices.refresh index: 'test'
40
+ end
41
+
42
+ should 'explain the match' do
43
+ response = @client.search index: 'test', body: search {
44
+ query { match title: 'test' }
45
+ explain true
46
+ }.to_hash
47
+
48
+ assert_equal 1, response['hits']['total']['value']
49
+ assert_not_nil response['hits']['hits'][0]['_explanation']
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end