本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon OpenSearch Service 异步搜索
通过对 Amazon OpenSearch Service 的异步搜索,您可以提交在后台执行的搜索查询,监控请求的进度,并在稍后阶段检索结果。您可以在搜索完成之前检索部分结果变得可用时检索这些结果。搜索完成后,保存结果以供日后检索和分析。
异步搜索需要 OpenSearch 1.0 或更高版本,或者 Elasticsearch 7.10 或更高版本。
本文档简要概述了异步搜索。此外还介绍了使用托管式 Amazon OpenSearch Service 域而不是开源 OpenSearch 集群进行异步搜索的限制。有关异步搜索的完整文档,包括可用设置、权限和完整的 API 参考,请参阅 OpenSearch 文档中的 Asynchronous search
搜索调用示例
要执行异步搜索,请使用下列格式将 HTTP 请求发送到 _plugins/_asynchronous_search
:
POST
opensearch-domain
/_plugins/_asynchronous_search
注意
如果您使用的是 Elasticsearch 7.10 而不是某个 OpenSearch 版本,请将所有异步搜索请求中的 _plugins
替换为 _opendistro
。
您可以指定以下异步搜索选项:
Options | 描述 | 默认值 | 必需 |
---|---|---|---|
wait_for_completion_timeout |
指定您计划等待结果的时间量。您可以看到在这段时间内获得的任何结果,就像在正常搜索中一样。您可以根据 ID 轮询剩余的结果。最大值为 300 秒。 |
1 秒 |
否 |
keep_on_completion |
指定是否要在搜索完成后将结果保存在集群中。您可以稍后检查存储的结果。 |
false |
否 |
keep_alive |
指定结果保存在集群中的时间量。例如, |
12 小时 |
否 |
示例请求
POST _plugins/_asynchronous_search/?pretty&size=10&wait_for_completion_timeout=1ms&keep_on_completion=true&request_cache=false { "aggs": { "city": { "terms": { "field": "city", "size": 10 } } } }
注意
适用于标准 _search
的所有请求参数查询。如果您使用的是 Elasticsearch 7.10 而不是某个 OpenSearch 版本,请将 _plugins
替换为 _opendistro
。
异步搜索权限
支持异步搜索访问权限的精细控制。有关混合和匹配权限以适应您的使用案例的详细信息,请参阅异步搜索安全
对于启用了细粒度访问控制的域,您需要角色的以下最低权限:
# Allows users to use all asynchronous search functionality asynchronous_search_full_access: reserved: true cluster_permissions: - 'cluster:admin/opensearch/asynchronous-search/*' index_permissions: - index_patterns: - '*' allowed_actions: - 'indices:data/read/search*' # Allows users to read stored asynchronous search results asynchronous_search_read_access: reserved: true cluster_permissions: - 'cluster:admin/opensearch/asynchronous-search/get'
对于已禁用细粒度访问控制的域,请使用您的 IAM 访问权限和私有密钥签署所有请求。您可以使用异步搜索 ID 访问结果。
异步搜索设置
OpenSearch 允许您使用 _cluster/settings
API 更改所有可用异步搜索设置
-
plugins.asynchronous_search.node_concurrent_running_searches
-
plugins.asynchronous_search.persist_search_failures
跨集群搜索
您可以跨集群执行异步搜索,但具有以下次要限制:
-
您只能在源域上运行异步搜索。
-
作为跨群集搜索查询的一部分,您不能最大限度地减少网络往返行程。
如果要在连接别名为 cluster_b
的 domain-a -> domain-b
与连接别名为 cluster_c
的 domain-a -> domain-c
之间设置连接,请按以下方式异步搜索 domain-a
、domain-b
和 domain-c
:
POST https://src-domain.us-east-1.es.amazonaws.com/local_index,cluster_b:b_index,cluster_c:c_index/_plugins/_asynchronous_search/?pretty&size=10&wait_for_completion_timeout=500ms&keep_on_completion=true&request_cache=false { "size": 0, "_source": { "excludes": [] }, "aggs": { "2": { "terms": { "field": "clientip", "size": 50, "order": { "_count": "desc" } } } }, "stored_fields": [ "*" ], "script_fields": {}, "docvalue_fields": [ "@timestamp" ], "query": { "bool": { "must": [ { "query_string": { "query": "status:404", "analyze_wildcard": true, "default_field": "*" } }, { "range": { "@timestamp": { "gte": 1483747200000, "lte": 1488326400000, "format": "epoch_millis" } } } ], "filter": [], "should": [], "must_not": [] } } }
响应
{ "id" : "Fm9pYzJyVG91U19xb0hIQUJnMHJfRFEAAAAAAAknghQ1OWVBczNZQjVEa2dMYTBXaTdEagAAAAAAAAAB", "state" : "RUNNING", "start_time_in_millis" : 1609329314796, "expiration_time_in_millis" : 1609761314796 }
有关更多信息,请参阅 在 Amazon OpenSearch Service 中执行跨集群搜索。
UltraWarm
使用 UltraWarm 索引的异步搜索继续工作。有关更多信息,请参阅 Amazon OpenSearch Service 的 UltraWarm 存储。
注意
您可以在 CloudWatch 中监控异步搜索统计信息。有关指标的完整列表,请参阅异步搜索指标。