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
@@ -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
|