亚马逊 OpenSearch 服务中的异步搜索 - 亚马逊 OpenSearch 服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊 OpenSearch 服务中的异步搜索

通过异步搜索 Amazon Ser OpenSearch vice,您可以提交在后台执行的搜索查询,监控请求的进度,并在稍后阶段检索结果。您可以在搜索完成之前检索部分结果变得可用时检索这些结果。搜索完成后,保存结果以供日后检索和分析。

异步搜索需要 OpenSearch 1.0 或更高版本,或 Elasticsearch 7.10 或更高版本。

本文档简要概述了异步搜索。它还讨论了在托管的 Amazon S OpenSearch ervice 域而不是开源 OpenSearch 集群中使用异步搜索的局限性。有关异步搜索的完整文档,包括可用设置、权限和完整的 API 参考,请参阅 OpenSearch 文档中的异步搜索

搜索调用示例

要执行异步搜索,请使用下列格式将 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

指定结果保存在集群中的时间量。例如,2d 意味着结果存储在集群中 48 小时。保存的搜索结果将在此时间段之后或取消搜索时被删除。请注意,这包括查询运行时。如果此时查询超出,则进程将自动取消此查询。

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 更改所有可用的异步搜索设置。在 OpenSearch 服务中,您只能更改以下设置:

  • plugins.asynchronous_search.node_concurrent_running_searches

  • plugins.asynchronous_search.persist_search_failures

跨集群搜索

您可以跨集群执行异步搜索,但具有以下次要限制:

  • 您只能在源域上运行异步搜索。

  • 作为跨群集搜索查询的一部分,您不能最大限度地减少网络往返行程。

如果要在连接别名为 cluster_bdomain-a -> domain-b 与连接别名为 cluster_cdomain-a -> domain-c 之间设置连接,请按以下方式异步搜索 domain-adomain-bdomain-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 服务中进行跨集群搜索

UltraWarm

使用 UltraWarm 索引进行异步搜索仍然有效。有关更多信息,请参阅 UltraWarm 亚马逊 OpenSearch 服务的存储空间

注意

您可以在中监控异步搜索统计信息 CloudWatch。有关指标的完整列表,请参阅异步搜索指标