Amazon Elasticsearch Service 的异步搜索 - Amazon Elasticsearch Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon Elasticsearch Service 的异步搜索

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

异步搜索需要弹性搜索 7.10 或更高版本。异步搜索的完整文档,包括详细步骤和 API 说明,请参阅Open Distro by Elasticsearch 文档

搜索调用示例

要执行异步搜索,请将 HTTP 请求发送到_opendistro/_asynchronous_search使用以下格式:

POST elasticsearch_domain/_opendistro/_asynchronous_search

您可以指定以下异步搜索选项:

选项 描述 默认值 必需
wait_for_completion_timeout

指定您计划等待结果的时间量。您可以看到在这段时间内获得的任何结果,就像在正常搜索中一样。您可以根据 ID 轮询剩余的结果。最大值为 300 秒。

1
keep_on_completion

指定是否要在搜索完成后将结果保存在集群中。可以稍后检查存储的结果。

false
keep_alive

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

12小时

示例请求

POST _opendistro/_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查询。

异步搜索权限

异步搜索功能支持Amazon Elasticsearch (Amazon Elasticsearch Service) 中的精细访问控制。有关混合和匹配权限以适应您的使用案例的详细信息,请参阅异步搜索安全

对于启用了细粒度访问控制的域,您需要角色的以下最低权限:

# Allows users to use all asynchronous-search functionality asynchronous_search_full_access: reserved: true cluster_permissions: - 'cluster:admin/opendistro/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/opendistro/asynchronous-search/get'

对于已禁用细粒度访问控制的域,请使用您的 IAM 访问权限和私有密钥签署所有请求。您可以使用异步搜索 ID 访问结果。

异步搜索设置

Open Distro on Elasticsearch 让您可以更改所有可用的异步搜索设置使用_cluster/settingsAPI。在 Amazon EES 中,您只能更改以下设置:

  • opendistro.asynchronous_search.node_concurrent_running_searches

  • opendistro.asynchronous_search.persist_search_failures

跨集群搜索

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

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

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

如果您在domain-a -> domain-b使用连接别名cluster_bdomain-a -> domain-c使用连接别名cluster_c,异步搜索domain-adomain-b, 和domain-c具体如下所示:

POST https://src-domain.us-east-1.es.amazonaws.com/local_index,cluster_b:b_index,cluster_c:c_index/_opendistro/_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 }

有关更多信息,请参阅 亚马逊 Elasticsearch Service 的跨集群搜索

UltraWarm

使用 UltraWarm 索引的异步搜索继续工作。有关更多信息,请参阅 Amazon Elasticsearch Service 的 Ultrasearch Service 超温存储

注意

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