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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +80 -46
- data/USER_GUIDE.md +149 -0
- data/bin/opensearch_ruby_console +4 -34
- data/lib/opensearch/api/actions/abort_benchmark.rb +49 -0
- data/lib/opensearch/api/actions/benchmark.rb +88 -0
- data/lib/opensearch/api/actions/bulk.rb +91 -0
- data/lib/opensearch/api/actions/cat/aliases.rb +79 -0
- data/lib/opensearch/api/actions/cat/all_pit_segments.rb +45 -0
- data/lib/opensearch/api/actions/cat/allocation.rb +83 -0
- data/lib/opensearch/api/actions/cat/cluster_manager.rb +54 -0
- data/lib/opensearch/api/actions/cat/count.rb +75 -0
- data/lib/opensearch/api/actions/cat/fielddata.rb +77 -0
- data/lib/opensearch/api/actions/cat/health.rb +72 -0
- data/lib/opensearch/api/actions/cat/help.rb +61 -0
- data/lib/opensearch/api/actions/cat/indices.rb +93 -0
- data/lib/opensearch/api/actions/cat/master.rb +73 -0
- data/lib/opensearch/api/actions/cat/nodeattrs.rb +73 -0
- data/lib/opensearch/api/actions/cat/nodes.rb +82 -0
- data/lib/opensearch/api/actions/cat/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/cat/pending_tasks.rb +76 -0
- data/lib/opensearch/api/actions/cat/pit_segments.rb +48 -0
- data/lib/opensearch/api/actions/cat/plugins.rb +75 -0
- data/lib/opensearch/api/actions/cat/recovery.rb +84 -0
- data/lib/opensearch/api/actions/cat/repositories.rb +73 -0
- data/lib/opensearch/api/actions/cat/segments.rb +76 -0
- data/lib/opensearch/api/actions/cat/shards.rb +85 -0
- data/lib/opensearch/api/actions/cat/snapshots.rb +82 -0
- data/lib/opensearch/api/actions/cat/tasks.rb +77 -0
- data/lib/opensearch/api/actions/cat/templates.rb +80 -0
- data/lib/opensearch/api/actions/cat/thread_pool.rb +84 -0
- data/lib/opensearch/api/actions/clear_scroll.rb +62 -0
- data/lib/opensearch/api/actions/cluster/allocation_explain.rb +67 -0
- data/lib/opensearch/api/actions/cluster/delete_component_template.rb +68 -0
- data/lib/opensearch/api/actions/cluster/delete_voting_config_exclusions.rb +59 -0
- data/lib/opensearch/api/actions/cluster/exists_component_template.rb +70 -0
- data/lib/opensearch/api/actions/cluster/get_component_template.rb +70 -0
- data/lib/opensearch/api/actions/cluster/get_settings.rb +67 -0
- data/lib/opensearch/api/actions/cluster/health.rb +88 -0
- data/lib/opensearch/api/actions/cluster/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/cluster/pending_tasks.rb +64 -0
- data/lib/opensearch/api/actions/cluster/post_voting_config_exclusions.rb +63 -0
- data/lib/opensearch/api/actions/cluster/put_component_template.rb +72 -0
- data/lib/opensearch/api/actions/cluster/put_settings.rb +68 -0
- data/{spec/unit/wrapper_gem_spec.rb → lib/opensearch/api/actions/cluster/remote_info.rb} +20 -17
- data/lib/opensearch/api/actions/cluster/reroute.rb +72 -0
- data/lib/opensearch/api/actions/cluster/state.rb +87 -0
- data/lib/opensearch/api/actions/cluster/stats.rb +68 -0
- data/lib/opensearch/api/actions/count.rb +96 -0
- data/lib/opensearch/api/actions/create.rb +60 -0
- data/lib/opensearch/api/actions/create_pit.rb +45 -0
- data/lib/opensearch/api/actions/dangling_indices/delete_dangling_index.rb +70 -0
- data/lib/opensearch/api/actions/dangling_indices/import_dangling_index.rb +69 -0
- data/lib/opensearch/api/actions/dangling_indices/list_dangling_indices.rb +51 -0
- data/lib/opensearch/api/actions/dangling_indices/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/delete.rb +89 -0
- data/lib/opensearch/api/actions/delete_all_pits.rb +26 -0
- data/lib/opensearch/api/actions/delete_by_query.rb +133 -0
- data/lib/opensearch/api/actions/delete_by_query_rethrottle.rb +62 -0
- data/lib/opensearch/api/actions/delete_pit.rb +30 -0
- data/lib/opensearch/api/actions/delete_script.rb +66 -0
- data/lib/opensearch/api/actions/exists.rb +94 -0
- data/lib/opensearch/api/actions/exists_source.rb +89 -0
- data/lib/opensearch/api/actions/explain.rb +99 -0
- data/lib/opensearch/api/actions/features/get_features.rb +61 -0
- data/lib/opensearch/api/actions/features/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/features/reset_features.rb +55 -0
- data/lib/opensearch/api/actions/field_caps.rb +78 -0
- data/lib/opensearch/api/actions/get.rb +93 -0
- data/lib/opensearch/api/actions/get_all_pits.rb +26 -0
- data/lib/opensearch/api/actions/get_script.rb +64 -0
- data/lib/opensearch/api/actions/get_script_context.rb +53 -0
- data/lib/opensearch/api/actions/get_script_languages.rb +53 -0
- data/lib/opensearch/api/actions/get_source.rb +87 -0
- data/lib/opensearch/api/actions/http/connect.rb +28 -0
- data/lib/opensearch/api/actions/http/delete.rb +28 -0
- data/lib/opensearch/api/actions/http/get.rb +28 -0
- data/lib/opensearch/api/actions/http/head.rb +28 -0
- data/lib/opensearch/api/actions/http/options.rb +28 -0
- data/lib/opensearch/api/actions/http/patch.rb +28 -0
- data/lib/opensearch/api/actions/http/post.rb +28 -0
- data/lib/opensearch/api/actions/http/put.rb +28 -0
- data/lib/opensearch/api/actions/http/request.rb +27 -0
- data/lib/opensearch/api/actions/http/trace.rb +28 -0
- data/lib/opensearch/api/actions/index.rb +96 -0
- data/lib/opensearch/api/actions/indices/add_block.rb +78 -0
- data/lib/opensearch/api/actions/indices/analyze.rb +71 -0
- data/lib/opensearch/api/actions/indices/clear_cache.rb +79 -0
- data/lib/opensearch/api/actions/indices/clone.rb +75 -0
- data/lib/opensearch/api/actions/indices/close.rb +76 -0
- data/lib/opensearch/api/actions/indices/create.rb +71 -0
- data/lib/opensearch/api/actions/indices/delete.rb +78 -0
- data/lib/opensearch/api/actions/indices/delete_alias.rb +72 -0
- data/lib/opensearch/api/actions/indices/delete_index_template.rb +68 -0
- data/lib/opensearch/api/actions/indices/delete_template.rb +72 -0
- data/lib/opensearch/api/actions/indices/disk_usage.rb +76 -0
- data/lib/opensearch/api/actions/indices/exists.rb +79 -0
- data/lib/opensearch/api/actions/indices/exists_alias.rb +82 -0
- data/lib/opensearch/api/actions/indices/exists_index_template.rb +72 -0
- data/lib/opensearch/api/actions/indices/exists_template.rb +75 -0
- data/lib/opensearch/api/actions/indices/field_usage_stats.rb +74 -0
- data/lib/opensearch/api/actions/indices/flush.rb +74 -0
- data/lib/opensearch/api/actions/indices/forcemerge.rb +76 -0
- data/lib/opensearch/api/actions/indices/get.rb +78 -0
- data/lib/opensearch/api/actions/indices/get_alias.rb +79 -0
- data/lib/opensearch/api/actions/indices/get_field_mapping.rb +83 -0
- data/lib/opensearch/api/actions/indices/get_index_template.rb +72 -0
- data/lib/opensearch/api/actions/indices/get_mapping.rb +81 -0
- data/lib/opensearch/api/actions/indices/get_settings.rb +87 -0
- data/lib/opensearch/api/actions/indices/get_template.rb +72 -0
- data/lib/opensearch/api/actions/indices/get_upgrade.rb +75 -0
- data/lib/opensearch/api/actions/indices/open.rb +76 -0
- data/lib/opensearch/api/actions/indices/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/indices/put_alias.rb +73 -0
- data/lib/opensearch/api/actions/indices/put_index_template.rb +72 -0
- data/lib/opensearch/api/actions/indices/put_mapping.rb +82 -0
- data/lib/opensearch/api/actions/indices/put_settings.rb +83 -0
- data/lib/opensearch/api/actions/indices/put_template.rb +72 -0
- data/lib/opensearch/api/actions/indices/recovery.rb +68 -0
- data/lib/opensearch/api/actions/indices/refresh.rb +70 -0
- data/lib/opensearch/api/actions/indices/resolve_index.rb +68 -0
- data/lib/opensearch/api/actions/indices/rollover.rb +81 -0
- data/lib/opensearch/api/actions/indices/segments.rb +72 -0
- data/lib/opensearch/api/actions/indices/shard_stores.rb +72 -0
- data/lib/opensearch/api/actions/indices/shrink.rb +77 -0
- data/lib/opensearch/api/actions/indices/simulate_index_template.rb +71 -0
- data/lib/opensearch/api/actions/indices/simulate_template.rb +73 -0
- data/lib/opensearch/api/actions/indices/split.rb +77 -0
- data/lib/opensearch/api/actions/indices/stats.rb +100 -0
- data/lib/opensearch/api/actions/indices/update_aliases.rb +66 -0
- data/lib/opensearch/api/actions/indices/upgrade.rb +79 -0
- data/lib/opensearch/api/actions/indices/validate_query.rb +99 -0
- data/{Gemfile → lib/opensearch/api/actions/info.rb} +19 -8
- data/lib/opensearch/api/actions/ingest/delete_pipeline.rb +68 -0
- data/lib/opensearch/api/actions/ingest/geo_ip_stats.rb +51 -0
- data/lib/opensearch/api/actions/ingest/get_pipeline.rb +70 -0
- data/lib/opensearch/api/actions/ingest/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/ingest/processor_grok.rb +51 -0
- data/lib/opensearch/api/actions/ingest/put_pipeline.rb +70 -0
- data/lib/opensearch/api/actions/ingest/simulate.rb +69 -0
- data/lib/opensearch/api/actions/mget.rb +86 -0
- data/lib/opensearch/api/actions/msearch.rb +105 -0
- data/lib/opensearch/api/actions/msearch_template.rb +89 -0
- data/lib/opensearch/api/actions/mtermvectors.rb +102 -0
- data/lib/opensearch/api/actions/nodes/hot_threads.rb +81 -0
- data/lib/opensearch/api/actions/nodes/info.rb +75 -0
- data/lib/opensearch/api/actions/nodes/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/nodes/reload_secure_settings.rb +67 -0
- data/lib/opensearch/api/actions/nodes/shutdown.rb +65 -0
- data/lib/opensearch/api/actions/nodes/stats.rb +96 -0
- data/lib/opensearch/api/actions/nodes/usage.rb +73 -0
- data/lib/opensearch/api/actions/params_registry.rb +67 -0
- data/lib/opensearch/api/actions/ping.rb +54 -0
- data/lib/opensearch/api/actions/put_script.rb +76 -0
- data/lib/opensearch/api/actions/rank_eval.rb +77 -0
- data/lib/opensearch/api/actions/reindex.rb +76 -0
- data/lib/opensearch/api/actions/reindex_rethrottle.rb +62 -0
- data/{spec/integration/security_disabled/validation_integration_spec.rb → lib/opensearch/api/actions/remote/info.rb} +17 -11
- data/lib/opensearch/api/actions/remote_store/restore.rb +43 -0
- data/lib/opensearch/api/actions/render_search_template.rb +62 -0
- data/lib/opensearch/api/actions/scripts_painless_execute.rb +59 -0
- data/lib/opensearch/api/actions/scroll.rb +78 -0
- data/lib/opensearch/api/actions/search.rb +161 -0
- data/lib/opensearch/api/actions/search_shards.rb +74 -0
- data/lib/opensearch/api/actions/search_template.rb +96 -0
- data/lib/opensearch/api/actions/security/change_password.rb +39 -0
- data/lib/opensearch/api/actions/security/create_action_group.rb +42 -0
- data/lib/opensearch/api/actions/security/create_role.rb +43 -0
- data/lib/opensearch/api/actions/security/create_role_mapping.rb +43 -0
- data/lib/opensearch/api/actions/security/create_tenant.rb +42 -0
- data/lib/opensearch/api/actions/security/create_user.rb +43 -0
- data/lib/opensearch/api/actions/security/delete_action_group.rb +41 -0
- data/lib/opensearch/api/actions/security/delete_distinguished_names.rb +41 -0
- data/lib/opensearch/api/actions/security/delete_role.rb +41 -0
- data/lib/opensearch/api/actions/security/delete_role_mapping.rb +41 -0
- data/lib/opensearch/api/actions/security/delete_tenant.rb +41 -0
- data/lib/opensearch/api/actions/security/delete_user.rb +41 -0
- data/lib/opensearch/api/actions/security/flush_cache.rb +36 -0
- data/lib/opensearch/api/actions/security/get_account_details.rb +36 -0
- data/lib/opensearch/api/actions/security/get_action_group.rb +41 -0
- data/lib/opensearch/api/actions/security/get_action_groups.rb +36 -0
- data/lib/opensearch/api/actions/security/get_audit_configuration.rb +36 -0
- data/lib/opensearch/api/actions/security/get_certificates.rb +36 -0
- data/lib/opensearch/api/actions/security/get_configuration.rb +36 -0
- data/lib/opensearch/api/actions/security/get_distinguished_names.rb +39 -0
- data/lib/opensearch/api/actions/security/get_role.rb +41 -0
- data/lib/opensearch/api/actions/security/get_role_mapping.rb +41 -0
- data/lib/opensearch/api/actions/security/get_role_mappings.rb +36 -0
- data/lib/opensearch/api/actions/security/get_roles.rb +36 -0
- data/lib/opensearch/api/actions/security/get_tenant.rb +41 -0
- data/lib/opensearch/api/actions/security/get_tenants.rb +36 -0
- data/lib/opensearch/api/actions/security/get_user.rb +41 -0
- data/lib/opensearch/api/actions/security/get_users.rb +36 -0
- data/lib/opensearch/api/actions/security/health.rb +36 -0
- data/lib/opensearch/api/actions/security/patch_action_group.rb +42 -0
- data/lib/opensearch/api/actions/security/patch_action_groups.rb +37 -0
- data/lib/opensearch/api/actions/security/patch_audit_configuration.rb +39 -0
- data/lib/opensearch/api/actions/security/patch_configuration.rb +39 -0
- data/lib/opensearch/api/actions/security/patch_distinguished_names.rb +39 -0
- data/lib/opensearch/api/actions/security/patch_role.rb +43 -0
- data/lib/opensearch/api/actions/security/patch_role_mapping.rb +43 -0
- data/lib/opensearch/api/actions/security/patch_role_mappings.rb +39 -0
- data/lib/opensearch/api/actions/security/patch_roles.rb +39 -0
- data/lib/opensearch/api/actions/security/patch_tenant.rb +43 -0
- data/lib/opensearch/api/actions/security/patch_tenants.rb +39 -0
- data/lib/opensearch/api/actions/security/patch_user.rb +43 -0
- data/lib/opensearch/api/actions/security/patch_users.rb +39 -0
- data/lib/opensearch/api/actions/security/reload_http_certificates.rb +36 -0
- data/lib/opensearch/api/actions/security/reload_transport_certificates.rb +36 -0
- data/lib/opensearch/api/actions/security/update_audit_configuration.rb +39 -0
- data/lib/opensearch/api/actions/security/update_configuration.rb +39 -0
- data/lib/opensearch/api/actions/security/update_distinguished_names.rb +42 -0
- data/lib/opensearch/api/actions/shutdown/delete_node.rb +60 -0
- data/lib/opensearch/api/actions/shutdown/get_node.rb +62 -0
- data/lib/opensearch/api/actions/shutdown/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/shutdown/put_node.rb +62 -0
- data/lib/opensearch/api/actions/snapshot/cleanup_repository.rb +68 -0
- data/lib/opensearch/api/actions/snapshot/clone.rb +76 -0
- data/lib/opensearch/api/actions/snapshot/create.rb +73 -0
- data/lib/opensearch/api/actions/snapshot/create_repository.rb +72 -0
- data/lib/opensearch/api/actions/snapshot/delete.rb +74 -0
- data/lib/opensearch/api/actions/snapshot/delete_repository.rb +72 -0
- data/lib/opensearch/api/actions/snapshot/get.rb +82 -0
- data/lib/opensearch/api/actions/snapshot/get_features.rb +61 -0
- data/lib/opensearch/api/actions/snapshot/get_repository.rb +73 -0
- data/lib/opensearch/api/actions/snapshot/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/snapshot/repository_analyze.rb +84 -0
- data/lib/opensearch/api/actions/snapshot/restore.rb +73 -0
- data/lib/opensearch/api/actions/snapshot/status.rb +79 -0
- data/lib/opensearch/api/actions/snapshot/verify_repository.rb +68 -0
- data/lib/opensearch/api/actions/tasks/cancel.rb +76 -0
- data/lib/opensearch/api/actions/tasks/get.rb +68 -0
- data/lib/opensearch/api/actions/tasks/list.rb +75 -0
- data/lib/opensearch/api/actions/tasks/params_registry.rb +69 -0
- data/lib/opensearch/api/actions/termvectors.rb +108 -0
- data/lib/opensearch/api/actions/update.rb +99 -0
- data/lib/opensearch/api/actions/update_by_query.rb +137 -0
- data/lib/opensearch/api/actions/update_by_query_rethrottle.rb +62 -0
- data/{spec/integration/security_enabled/validation_integration_spec.rb → lib/opensearch/api/namespace/cat.rb} +19 -12
- data/lib/opensearch/api/namespace/cluster.rb +47 -0
- data/lib/opensearch/api/namespace/common.rb +72 -0
- data/lib/opensearch/api/namespace/dangling_indices.rb +47 -0
- data/lib/opensearch/api/namespace/features.rb +47 -0
- data/lib/opensearch/api/namespace/http.rb +30 -0
- data/lib/opensearch/api/namespace/indices.rb +47 -0
- data/lib/opensearch/api/namespace/ingest.rb +47 -0
- data/lib/opensearch/api/namespace/nodes.rb +47 -0
- data/lib/opensearch/api/namespace/remote.rb +47 -0
- data/lib/opensearch/api/namespace/remote_store.rb +30 -0
- data/lib/opensearch/api/namespace/security.rb +30 -0
- data/lib/opensearch/api/namespace/shutdown.rb +47 -0
- data/lib/opensearch/api/namespace/snapshot.rb +47 -0
- data/lib/opensearch/api/namespace/tasks.rb +47 -0
- data/lib/opensearch/api/utils.rb +296 -0
- data/lib/opensearch/api.rb +104 -0
- data/lib/opensearch/dsl/search/aggregation.rb +112 -0
- data/lib/opensearch/dsl/search/aggregations/avg.rb +49 -0
- data/lib/opensearch/dsl/search/aggregations/cardinality.rb +56 -0
- data/lib/opensearch/dsl/search/aggregations/children.rb +63 -0
- data/lib/opensearch/dsl/search/aggregations/composite.rb +68 -0
- data/lib/opensearch/dsl/search/aggregations/date_histogram.rb +64 -0
- data/lib/opensearch/dsl/search/aggregations/date_range.rb +59 -0
- data/lib/opensearch/dsl/search/aggregations/extended_stats.rb +48 -0
- data/lib/opensearch/dsl/search/aggregations/filter.rb +54 -0
- data/lib/opensearch/dsl/search/aggregations/filters.rb +59 -0
- data/lib/opensearch/dsl/search/aggregations/geo_bounds.rb +68 -0
- data/lib/opensearch/dsl/search/aggregations/geo_distance.rb +63 -0
- data/lib/opensearch/dsl/search/aggregations/geohash_grid.rb +59 -0
- data/lib/opensearch/dsl/search/aggregations/global.rb +52 -0
- data/{spec/integration/security_disabled/client_integration_spec.rb → lib/opensearch/dsl/search/aggregations/histogram.rb} +29 -29
- data/lib/opensearch/dsl/search/aggregations/ip_range.rb +55 -0
- data/lib/opensearch/dsl/search/aggregations/max.rb +49 -0
- data/lib/opensearch/dsl/search/aggregations/min.rb +49 -0
- data/lib/opensearch/dsl/search/aggregations/missing.rb +59 -0
- data/lib/opensearch/dsl/search/aggregations/nested.rb +57 -0
- data/lib/opensearch/dsl/search/aggregations/percentile_ranks.rb +58 -0
- data/lib/opensearch/dsl/search/aggregations/percentiles.rb +57 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/avg_bucket.rb +58 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_script.rb +60 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_selector.rb +59 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_sort.rb +111 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/cumulative_sum.rb +57 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/derivative.rb +58 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/extended_stats_bucket.rb +58 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/max_bucket.rb +58 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/min_bucket.rb +58 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/moving_avg.rb +66 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/percentiles_bucket.rb +60 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/serial_diff.rb +60 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/stats_bucket.rb +58 -0
- data/lib/opensearch/dsl/search/aggregations/pipeline/sum_bucket.rb +58 -0
- data/lib/opensearch/dsl/search/aggregations/range.rb +77 -0
- data/lib/opensearch/dsl/search/aggregations/reverse_nested.rb +61 -0
- data/lib/opensearch/dsl/search/aggregations/scripted_metric.rb +63 -0
- data/lib/opensearch/dsl/search/aggregations/significant_terms.rb +69 -0
- data/lib/opensearch/dsl/search/aggregations/stats.rb +61 -0
- data/lib/opensearch/dsl/search/aggregations/sum.rb +49 -0
- data/lib/opensearch/dsl/search/aggregations/terms.rb +66 -0
- data/lib/opensearch/dsl/search/aggregations/top_hits.rb +59 -0
- data/lib/opensearch/dsl/search/aggregations/value_count.rb +49 -0
- data/lib/opensearch/dsl/search/base_aggregation_component.rb +83 -0
- data/lib/opensearch/dsl/search/base_component.rb +191 -0
- data/lib/opensearch/dsl/search/base_compound_filter_component.rb +124 -0
- data/lib/opensearch/dsl/search/filter.rb +82 -0
- data/lib/opensearch/dsl/search/filters/and.rb +70 -0
- data/lib/opensearch/dsl/search/filters/bool.rb +103 -0
- data/lib/opensearch/dsl/search/filters/exists.rb +56 -0
- data/lib/opensearch/dsl/search/filters/geo_bounding_box.rb +69 -0
- data/lib/opensearch/dsl/search/filters/geo_distance.rb +81 -0
- data/lib/opensearch/dsl/search/filters/geo_distance_range.rb +56 -0
- data/lib/opensearch/dsl/search/filters/geo_polygon.rb +65 -0
- data/lib/opensearch/dsl/search/filters/geo_shape.rb +59 -0
- data/lib/opensearch/dsl/search/filters/geohash_cell.rb +71 -0
- data/lib/opensearch/dsl/search/filters/has_child.rb +98 -0
- data/lib/opensearch/dsl/search/filters/has_parent.rb +97 -0
- data/lib/opensearch/dsl/search/filters/ids.rb +56 -0
- data/lib/opensearch/dsl/search/filters/indices.rb +101 -0
- data/lib/opensearch/dsl/search/filters/limit.rb +55 -0
- data/lib/opensearch/dsl/search/filters/match_all.rb +52 -0
- data/lib/opensearch/dsl/search/filters/missing.rb +58 -0
- data/lib/opensearch/dsl/search/filters/nested.rb +91 -0
- data/lib/opensearch/dsl/search/filters/not.rb +98 -0
- data/lib/opensearch/dsl/search/filters/or.rb +70 -0
- data/lib/opensearch/dsl/search/filters/prefix.rb +53 -0
- data/lib/opensearch/dsl/search/filters/query.rb +77 -0
- data/lib/opensearch/dsl/search/filters/range.rb +63 -0
- data/lib/opensearch/dsl/search/filters/regexp.rb +58 -0
- data/lib/opensearch/dsl/search/filters/script.rb +56 -0
- data/lib/opensearch/dsl/search/filters/term.rb +55 -0
- data/lib/opensearch/dsl/search/filters/terms.rb +56 -0
- data/lib/opensearch/dsl/search/filters/type.rb +58 -0
- data/lib/opensearch/dsl/search/highlight.rb +117 -0
- data/lib/opensearch/dsl/search/options.rb +80 -0
- data/lib/opensearch/dsl/search/queries/bool.rb +110 -0
- data/lib/opensearch/dsl/search/queries/boosting.rb +57 -0
- data/lib/opensearch/dsl/search/queries/common.rb +62 -0
- data/lib/opensearch/dsl/search/queries/constant_score.rb +90 -0
- data/lib/opensearch/dsl/search/queries/dis_max.rb +59 -0
- data/lib/opensearch/dsl/search/queries/exists.rb +68 -0
- data/lib/opensearch/dsl/search/queries/filtered.rb +101 -0
- data/lib/opensearch/dsl/search/queries/function_score.rb +122 -0
- data/lib/opensearch/dsl/search/queries/fuzzy.rb +69 -0
- data/lib/opensearch/dsl/search/queries/fuzzy_like_this.rb +61 -0
- data/lib/opensearch/dsl/search/queries/fuzzy_like_this_field.rb +60 -0
- data/lib/opensearch/dsl/search/queries/geo_shape.rb +54 -0
- data/lib/opensearch/dsl/search/queries/has_child.rb +82 -0
- data/lib/opensearch/dsl/search/queries/has_parent.rb +82 -0
- data/lib/opensearch/dsl/search/queries/ids.rb +52 -0
- data/lib/opensearch/dsl/search/queries/indices.rb +58 -0
- data/lib/opensearch/dsl/search/queries/match.rb +66 -0
- data/lib/opensearch/dsl/search/queries/match_all.rb +50 -0
- data/lib/opensearch/dsl/search/queries/match_phrase.rb +56 -0
- data/lib/opensearch/dsl/search/queries/match_phrase_prefix.rb +55 -0
- data/lib/opensearch/dsl/search/queries/more_like_this.rb +88 -0
- data/lib/opensearch/dsl/search/queries/multi_match.rb +69 -0
- data/lib/opensearch/dsl/search/queries/nested.rb +80 -0
- data/lib/opensearch/dsl/search/queries/prefix.rb +54 -0
- data/lib/opensearch/dsl/search/queries/query_string.rb +75 -0
- data/lib/opensearch/dsl/search/queries/range.rb +71 -0
- data/lib/opensearch/dsl/search/queries/regexp.rb +55 -0
- data/lib/opensearch/dsl/search/queries/script_score.rb +62 -0
- data/lib/opensearch/dsl/search/queries/simple_query_string.rb +64 -0
- data/lib/opensearch/dsl/search/queries/span_first.rb +52 -0
- data/lib/opensearch/dsl/search/queries/span_multi.rb +52 -0
- data/lib/opensearch/dsl/search/queries/span_near.rb +56 -0
- data/lib/opensearch/dsl/search/queries/span_not.rb +57 -0
- data/lib/opensearch/dsl/search/queries/span_or.rb +52 -0
- data/lib/opensearch/dsl/search/queries/span_term.rb +50 -0
- data/lib/opensearch/dsl/search/queries/template.rb +55 -0
- data/lib/opensearch/dsl/search/queries/term.rb +50 -0
- data/lib/opensearch/dsl/search/queries/terms.rb +51 -0
- data/lib/opensearch/dsl/search/queries/top_children.rb +82 -0
- data/lib/opensearch/dsl/search/queries/wildcard.rb +54 -0
- data/lib/opensearch/dsl/search/query.rb +82 -0
- data/lib/opensearch/dsl/search/sort.rb +83 -0
- data/lib/opensearch/dsl/search/suggest.rb +52 -0
- data/lib/opensearch/dsl/search.rb +282 -0
- data/lib/opensearch/dsl/utils.rb +49 -0
- data/lib/opensearch/dsl.rb +69 -0
- data/lib/opensearch/transport/client.rb +362 -0
- data/lib/opensearch/transport/redacted.rb +82 -0
- data/lib/opensearch/transport/transport/base.rb +451 -0
- data/lib/opensearch/transport/transport/connections/collection.rb +134 -0
- data/lib/opensearch/transport/transport/connections/connection.rb +168 -0
- data/lib/opensearch/transport/transport/connections/selector.rb +100 -0
- data/lib/opensearch/transport/transport/errors.rb +97 -0
- data/lib/opensearch/transport/transport/http/curb.rb +139 -0
- data/lib/opensearch/transport/transport/http/faraday.rb +101 -0
- data/lib/opensearch/transport/transport/http/manticore.rb +188 -0
- data/lib/opensearch/transport/transport/loggable.rb +92 -0
- data/lib/opensearch/transport/transport/response.rb +47 -0
- data/lib/opensearch/transport/transport/serializer/multi_json.rb +61 -0
- data/lib/opensearch/transport/transport/sniffer.rb +110 -0
- data/lib/opensearch/transport.rb +44 -0
- data/lib/opensearch/version.rb +1 -1
- data/lib/opensearch-dsl.rb +27 -0
- data/lib/opensearch.rb +12 -12
- data/opensearch-ruby.gemspec +69 -0
- data/spec/spec_helper.rb +95 -4
- data/test/dsl/integration/search_aggregation_children_test.rb +91 -0
- data/test/dsl/integration/search_aggregation_geo_test.rb +112 -0
- data/test/dsl/integration/search_aggregation_nested_test.rb +129 -0
- data/test/dsl/integration/search_aggregations_test.rb +288 -0
- data/test/dsl/integration/search_filters_test.rb +290 -0
- data/test/dsl/integration/search_options_test.rb +54 -0
- data/test/dsl/integration/search_query_test.rb +98 -0
- data/test/dsl/integration/search_size_from_test.rb +71 -0
- data/test/dsl/integration/search_sort_test.rb +57 -0
- data/test/dsl/integration/search_suggest_test.rb +107 -0
- data/test/dsl/integration/search_test.rb +81 -0
- data/test/dsl/test_helper.rb +95 -0
- data/test/dsl/unit/dsl_test.rb +44 -0
- data/test/dsl/unit/search_aggregation_test.rb +96 -0
- data/test/dsl/unit/search_base_aggregation_component_test.rb +66 -0
- data/test/dsl/unit/search_base_component_test.rb +210 -0
- data/test/dsl/unit/search_filter_test.rb +84 -0
- data/test/dsl/unit/search_highlight_test.rb +103 -0
- data/test/dsl/unit/search_options_test.rb +114 -0
- data/test/dsl/unit/search_query_test.rb +88 -0
- data/test/dsl/unit/search_size_from_test.rb +68 -0
- data/test/dsl/unit/search_sort_test.rb +91 -0
- data/test/dsl/unit/search_suggest_test.rb +46 -0
- data/test/dsl/unit/search_test.rb +268 -0
- data/test/dsl/unit/utils_test.rb +47 -0
- data/test/transport/integration/transport_test.rb +117 -0
- data/test/transport/profile/client_benchmark_test.rb +141 -0
- data/test/transport/test_helper.rb +97 -0
- data/test/transport/unit/connection_test.rb +145 -0
- data/test/transport/unit/response_test.rb +46 -0
- data/test/transport/unit/serializer_test.rb +42 -0
- data/test/transport/unit/transport_base_test.rb +673 -0
- data/test/transport/unit/transport_curb_test.rb +143 -0
- data/test/transport/unit/transport_faraday_test.rb +237 -0
- data/test/transport/unit/transport_manticore_test.rb +191 -0
- data.tar.gz.sig +0 -0
- metadata +502 -191
- metadata.gz.sig +0 -0
- data/.gitignore +0 -21
- data/Rakefile +0 -69
- data/opensearch.gemspec +0 -81
- data/spec/integration/security_enabled/client_integration_spec.rb +0 -43
- data/spec/unit/opensearch_product_validation_spec.rb +0 -198
- /data/{LICENSE → LICENSE.txt} +0 -0
data/spec/spec_helper.rb
CHANGED
@@ -24,12 +24,103 @@
|
|
24
24
|
# specific language governing permissions and limitations
|
25
25
|
# under the License.
|
26
26
|
|
27
|
+
if ENV.fetch('COVERAGE', nil) && ENV['CI'].nil?
|
28
|
+
require 'simplecov'
|
29
|
+
SimpleCov.start { add_filter %r{^/test|spec/} }
|
30
|
+
end
|
31
|
+
|
32
|
+
require 'ansi'
|
27
33
|
require 'opensearch'
|
28
|
-
require '
|
34
|
+
require 'opensearch-dsl'
|
35
|
+
require 'jbuilder'
|
36
|
+
require 'jsonify'
|
37
|
+
require 'yaml'
|
38
|
+
require 'hashie/mash'
|
39
|
+
|
40
|
+
require 'faraday/httpclient'
|
41
|
+
require 'faraday/net_http_persistent'
|
42
|
+
require 'logger'
|
43
|
+
require 'ansi/code'
|
44
|
+
|
45
|
+
if defined?(JRUBY_VERSION)
|
46
|
+
require 'opensearch/transport/transport/http/manticore'
|
47
|
+
require 'pry-nav'
|
48
|
+
else
|
49
|
+
require 'faraday/patron'
|
50
|
+
require 'faraday/typhoeus' if Gem::Version.new(Faraday::VERSION) >= Gem::Version.new('2')
|
51
|
+
require 'opensearch/transport/transport/http/curb'
|
52
|
+
require 'curb'
|
53
|
+
end
|
54
|
+
|
55
|
+
tracer = ::Logger.new(STDERR)
|
56
|
+
tracer.formatter = ->(_s, _d, _p, m) { "#{m.gsub(/^.*$/) { |n| ' ' + n }.ansi(:faint)}\n" }
|
29
57
|
|
30
|
-
|
31
|
-
|
58
|
+
unless defined?(OPENSEARCH_URL)
|
59
|
+
OPENSEARCH_URL = ENV.fetch('OPENSEARCH_URL', nil) ||
|
60
|
+
ENV.fetch('TEST_OPENSEARCH_SERVER', nil) ||
|
61
|
+
"http://localhost:#{ENV.fetch('TEST_CLUSTER_PORT', nil) || 9200}"
|
62
|
+
end
|
63
|
+
|
64
|
+
DEFAULT_CLIENT = OpenSearch::Client.new(host: OPENSEARCH_URL,
|
65
|
+
tracer: (tracer unless ENV['QUIET']))
|
66
|
+
|
67
|
+
# The hosts to use for creating a opensearch client.
|
68
|
+
hosts = ENV['TEST_OPENSEARCH_SERVER'] || ENV['OPENSEARCH_HOSTS']
|
69
|
+
OPENSEARCH_HOSTS = if hosts
|
70
|
+
hosts.split(',').map do |host|
|
71
|
+
/(http\:\/\/)?(\S+)/.match(host)[2]
|
72
|
+
end
|
73
|
+
else
|
74
|
+
['localhost:9200']
|
75
|
+
end.freeze
|
76
|
+
|
77
|
+
# Are we testing on JRuby?
|
78
|
+
# @return [ true, false ] Whether JRuby is being used.
|
79
|
+
def jruby?
|
80
|
+
RUBY_PLATFORM =~ /\bjava\b/
|
81
|
+
end
|
82
|
+
|
83
|
+
# The names of the connected nodes.
|
84
|
+
# @return [ Array<String> ] The node names.
|
85
|
+
def node_names
|
86
|
+
node_stats = default_client.perform_request('GET', '_nodes/stats').body
|
87
|
+
$node_names ||= node_stats['nodes'].collect do |name, stats|
|
88
|
+
stats['name']
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# The default client.
|
93
|
+
# @return [ OpenSearch::Client ] The default client.
|
94
|
+
def default_client
|
95
|
+
$client ||= OpenSearch::Client.new(hosts: OPENSEARCH_HOSTS)
|
96
|
+
end
|
97
|
+
|
98
|
+
class NotFound < StandardError; end
|
99
|
+
|
100
|
+
module HelperModule
|
101
|
+
def self.included(context)
|
102
|
+
context.let(:client_double) do
|
103
|
+
Class.new { include OpenSearch::API }.new.tap do |client|
|
104
|
+
expect(client).to receive(:perform_request).with(*expected_args).and_return(response_double)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context.let(:client) do
|
109
|
+
Class.new { include OpenSearch::API }.new.tap do |client|
|
110
|
+
expect(client).to receive(:perform_request).with(*expected_args).and_return(response_double)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context.let(:response_double) do
|
115
|
+
double('response', status: 200, body: {}, headers: {})
|
116
|
+
end
|
117
|
+
|
118
|
+
context.let(:hosts) { OPENSEARCH_HOSTS }
|
119
|
+
end
|
120
|
+
end
|
32
121
|
|
33
122
|
RSpec.configure do |config|
|
34
|
-
config.
|
123
|
+
config.include(HelperModule)
|
124
|
+
config.formatter = 'documentation'
|
125
|
+
config.color = true
|
35
126
|
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_relative '../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
|
+
setup do
|
36
|
+
@client.indices.create index: 'articles-and-comments', body: {
|
37
|
+
mappings: {
|
38
|
+
properties: {
|
39
|
+
title: { type: 'text' },
|
40
|
+
category: { type: 'keyword' },
|
41
|
+
join_field: { type: 'join', relations: { article: 'comment' } },
|
42
|
+
author: { type: 'keyword' }
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
@client.index index: 'articles-and-comments', id: 1,
|
48
|
+
body: { title: 'A', category: 'one', join_field: 'article' }
|
49
|
+
@client.index index: 'articles-and-comments', id: 2,
|
50
|
+
body: { title: 'B', category: 'one', join_field: 'article' }
|
51
|
+
@client.index index: 'articles-and-comments', id: 3,
|
52
|
+
body: { title: 'C', category: 'two', join_field: 'article' }
|
53
|
+
|
54
|
+
@client.index index: 'articles-and-comments', routing: '1',
|
55
|
+
body: { author: 'John', join_field: { name: 'comment', parent: 1 } }
|
56
|
+
@client.index index: 'articles-and-comments', routing: '1',
|
57
|
+
body: { author: 'Mary', join_field: { name: 'comment', parent: 1 } }
|
58
|
+
@client.index index: 'articles-and-comments', routing: '2',
|
59
|
+
body: { author: 'John', join_field: { name: 'comment', parent: 2 } }
|
60
|
+
@client.index index: 'articles-and-comments', routing: '2',
|
61
|
+
body: { author: 'Dave', join_field: { name: 'comment', parent: 2 } }
|
62
|
+
@client.index index: 'articles-and-comments', routing: '3',
|
63
|
+
body: { author: 'Ruth', join_field: { name: 'comment', parent: 3 } }
|
64
|
+
@client.indices.refresh index: 'articles-and-comments'
|
65
|
+
end
|
66
|
+
|
67
|
+
should 'return the top commenters per article category' do
|
68
|
+
response = @client.search index: 'articles-and-comments', size: 0, body: search {
|
69
|
+
aggregation :top_categories do
|
70
|
+
terms field: 'category' do
|
71
|
+
aggregation :comments do
|
72
|
+
children type: 'comment' do
|
73
|
+
aggregation :top_authors do
|
74
|
+
terms field: 'author'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
}.to_hash
|
81
|
+
|
82
|
+
assert_equal 'one', response['aggregations']['top_categories']['buckets'][0]['key']
|
83
|
+
assert_equal 3,
|
84
|
+
response['aggregations']['top_categories']['buckets'][0]['comments']['top_authors']['buckets'].size
|
85
|
+
assert_equal 'John',
|
86
|
+
response['aggregations']['top_categories']['buckets'][0]['comments']['top_authors']['buckets'][0]['key']
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,112 @@
|
|
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 GeoAggregationIntegrationTest < ::OpenSearch::Test::IntegrationTestCase
|
32
|
+
include OpenSearch::DSL::Search
|
33
|
+
|
34
|
+
context 'A geo aggregation' do
|
35
|
+
setup do
|
36
|
+
@client.indices.create index: 'venues-test', body: {
|
37
|
+
mappings: {
|
38
|
+
properties: {
|
39
|
+
location: { type: 'geo_point' }
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
@client.index index: 'venues-test',
|
44
|
+
body: { name: 'Space', location: '38.886214,1.403889' }
|
45
|
+
@client.index index: 'venues-test',
|
46
|
+
body: { name: 'Pacha', location: '38.9184427,1.4433646' }
|
47
|
+
@client.index index: 'venues-test',
|
48
|
+
body: { name: 'Amnesia', location: '38.948045,1.408341' }
|
49
|
+
@client.index index: 'venues-test',
|
50
|
+
body: { name: 'Privilege', location: '38.958082,1.408288' }
|
51
|
+
@client.index index: 'venues-test',
|
52
|
+
body: { name: 'Es Paradis', location: '38.979071,1.307394' }
|
53
|
+
@client.indices.refresh index: 'venues-test'
|
54
|
+
end
|
55
|
+
|
56
|
+
should 'return the geo distances from a location' do
|
57
|
+
response = @client.search index: 'venues-test', size: 0, body: search {
|
58
|
+
aggregation :venue_distances do
|
59
|
+
geo_distance do
|
60
|
+
field :location
|
61
|
+
origin '38.9126352,1.4350621'
|
62
|
+
unit 'km'
|
63
|
+
ranges [{ to: 1 }, { from: 1, to: 5 }, { from: 5, to: 10 }, { from: 10 }]
|
64
|
+
|
65
|
+
aggregation :top_venues do
|
66
|
+
top_hits _source: { include: 'name' }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
}.to_hash
|
71
|
+
|
72
|
+
result = response['aggregations']['venue_distances']
|
73
|
+
|
74
|
+
assert_equal 4, result['buckets'].size
|
75
|
+
assert_equal 1, result['buckets'][0]['doc_count']
|
76
|
+
assert_equal 'Pacha', result['buckets'][0]['top_venues']['hits']['hits'][0]['_source']['name']
|
77
|
+
|
78
|
+
assert_equal 2, result['buckets'][1]['top_venues']['hits']['total']['value']
|
79
|
+
end
|
80
|
+
|
81
|
+
should 'return the geohash grid distribution' do
|
82
|
+
#
|
83
|
+
# See the geohash plot eg. at http://openlocation.org/geohash/geohash-js/
|
84
|
+
# See the locations visually eg. at http://geohash.org/sncj8h17r2
|
85
|
+
#
|
86
|
+
response = @client.search index: 'venues-test', size: 0, body: search {
|
87
|
+
aggregation :venue_distributions do
|
88
|
+
geohash_grid do
|
89
|
+
field :location
|
90
|
+
precision 5
|
91
|
+
|
92
|
+
aggregation :top_venues do
|
93
|
+
top_hits _source: { include: 'name' }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
}.to_hash
|
98
|
+
|
99
|
+
result = response['aggregations']['venue_distributions']
|
100
|
+
|
101
|
+
assert_equal 4, result['buckets'].size
|
102
|
+
assert_equal 'sncj8', result['buckets'][0]['key']
|
103
|
+
assert_equal 2, result['buckets'][0]['doc_count']
|
104
|
+
|
105
|
+
assert_same_elements %w[Privilege Amnesia], result['buckets'][0]['top_venues']['hits']['hits'].map { |h|
|
106
|
+
h['_source']['name']
|
107
|
+
}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,129 @@
|
|
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 NestedAggregationIntegrationTest < ::OpenSearch::Test::IntegrationTestCase
|
32
|
+
include OpenSearch::DSL::Search
|
33
|
+
|
34
|
+
context 'A nested aggregation' do
|
35
|
+
setup do
|
36
|
+
@client.indices.create index: 'products-test', body: {
|
37
|
+
mappings: {
|
38
|
+
properties: {
|
39
|
+
title: { type: 'text' },
|
40
|
+
category: { type: 'keyword' },
|
41
|
+
offers: {
|
42
|
+
type: 'nested',
|
43
|
+
properties: {
|
44
|
+
name: { type: 'text' },
|
45
|
+
price: { type: 'double' }
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
@client.index index: 'products-test',
|
53
|
+
body: { title: 'A',
|
54
|
+
category: 'audio',
|
55
|
+
offers: [{ name: 'A1', price: 100 }, { name: 'A2', price: 120 }] }
|
56
|
+
@client.index index: 'products-test',
|
57
|
+
body: { title: 'B',
|
58
|
+
category: 'audio',
|
59
|
+
offers: [{ name: 'B1', price: 200 }, { name: 'B2', price: 180 }] }
|
60
|
+
@client.index index: 'products-test',
|
61
|
+
body: { title: 'C',
|
62
|
+
category: 'video',
|
63
|
+
offers: [{ name: 'C1', price: 300 }, { name: 'C2', price: 350 }] }
|
64
|
+
@client.indices.refresh index: 'products-test'
|
65
|
+
end
|
66
|
+
|
67
|
+
should 'return the minimal price from offers' do
|
68
|
+
response = @client.search index: 'products-test', body: search {
|
69
|
+
query { match title: 'A' }
|
70
|
+
|
71
|
+
aggregation :offers do
|
72
|
+
nested do
|
73
|
+
path 'offers'
|
74
|
+
aggregation :min_price do
|
75
|
+
min field: 'offers.price'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
}.to_hash
|
80
|
+
|
81
|
+
assert_equal 100, response['aggregations']['offers']['min_price']['value'].to_i
|
82
|
+
end
|
83
|
+
|
84
|
+
should 'return the top categories for offer price range' do
|
85
|
+
response = @client.search index: 'products-test', body: search {
|
86
|
+
query do
|
87
|
+
bool do
|
88
|
+
must do
|
89
|
+
nested do
|
90
|
+
path 'offers'
|
91
|
+
query do
|
92
|
+
bool do
|
93
|
+
filter do
|
94
|
+
range 'offers.price' do
|
95
|
+
gte 100
|
96
|
+
lte 300
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
aggregation :offers do
|
107
|
+
nested do
|
108
|
+
path 'offers'
|
109
|
+
aggregation :top_categories do
|
110
|
+
reverse_nested do
|
111
|
+
aggregation :top_category_per_offer do
|
112
|
+
terms field: 'category'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
}.to_hash
|
119
|
+
|
120
|
+
assert_equal 2, response['aggregations']['offers']['top_categories']['top_category_per_offer']['buckets'].size
|
121
|
+
assert_equal 'audio',
|
122
|
+
response['aggregations']['offers']['top_categories']['top_category_per_offer']['buckets'][0]['key']
|
123
|
+
assert_equal 'video',
|
124
|
+
response['aggregations']['offers']['top_categories']['top_category_per_offer']['buckets'][1]['key']
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|