异步搜索-《elasticsearch中文文档帮助手册教程V7.11》

admin 2025-11-04 00:19:47 数据库 来源:ZONE.CI 全球网 0 阅读模式
  • 异步搜索
    • 提交异步搜索 API
    • 获取异步搜索
    • 获取异步搜索状态
    • 删除异步搜索

    异步搜索

    异步搜索 API 允许异步执行搜索请求,监视其进度,并在部分结果可用时检索它们。

    提交异步搜索 API

    异步执行搜索请求。它接受与搜索 API 相同的参数和请求体。

    1. POST /sales*/_async_search?size=0
    2. {
    3. "sort": [
    4. { "date": { "order": "asc" } }
    5. ],
    6. "aggs": {
    7. "sale_date": {
    8. "date_histogram": {
    9. "field": "date",
    10. "calendar_interval": "1d"
    11. }
    12. }
    13. }
    14. }

    响应包含正在执行的搜索的标识符。你可以使用此 ID 稍后检索搜索的最终结果。当前可用的搜索结果将作为响应对象的一部分返回。

    1. {
    2. "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
    3. "is_partial" : true,
    4. "is_running" : true,
    5. "start_time_in_millis" : 1583945890986,
    6. "expiration_time_in_millis" : 1584377890986,
    7. "response" : {
    8. "took" : 1122,
    9. "timed_out" : false,
    10. "num_reduce_phases" : 0,
    11. "_shards" : {
    12. "total" : 562,
    13. "successful" : 3,
    14. "skipped" : 0,
    15. "failed" : 0
    16. },
    17. "hits" : {
    18. "total" : {
    19. "value" : 157483,
    20. "relation" : "gte"
    21. },
    22. "max_score" : null,
    23. "hits" : [ ]
    24. }
    25. }
    26. }
    1. "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=":异步搜索的标识符,可用于监视其进度、检索其结果和/或删除它
    2. "is_partial" : true: 当查询不再运行时,指示在所有分片上搜索是失败还是成功完成。执行查询时,is_partial 始终设置为 true
    3. "is_running" : true:搜索是否仍在执行或已完成
    4. "total" : 562:总共有多少个分片将被执行搜索
    5. "successful" : 3:有多少分片成功完成了搜索
    6. "value" : 157483:当前有多少文档与查询匹配,这些文档属于已完成搜索的分片

    ?> 注意 虽然查询不再运行,因此 is_running 设置为 false,但结果可能是部分的。如果某些分片返回结果后搜索失败,或者协调异步搜索的节点死亡,就会发生这种情况。

    通过提供 wait_for_completion_timeout 参数(默认为 1 秒),可以阻止并等待搜索完成,直到达到某个超时。当异步搜索在这样的超时内完成时,响应将不包括ID,因为结果不存储在集群中。keep_on_completion 参数(默认为 false)可以设置为 true,以请求存储结果,以便在 wait_for_completion_timeout 内搜索完成时,也可以进行后续检索。

    你还可以通过 keep_alive 参数指定异步搜索需要多长时间可用,该参数默认为 5d(五天)。在此期间之后,将删除正在进行的异步搜索和任何保存的搜索结果。

    ?> 注意 当结果的主要排序是索引字段时,分片将根据其为该字段保留的最小值和最大值进行排序,因此部分结果将根据请求的排序标准可用。

    提交异步搜索 API 支持与搜索 API 相同的参数,尽管有些参数具有不同的默认值:

    • batched_reduce_size 默认为 5:这会影响部分结果可用的频率,这会在碎片结果减少时发生。每次协调节点收到一定数量的新碎片响应(默认情况下为 5)时,都会执行部分减少。

    • request_cache 默认为 true

    • pre_filter_shard_size 默认为 1 且不能被修改:这是为了强制执行预筛选往返,以从每个切分中检索统计信息,从而跳过那些肯定不包含任何与查询匹配的文档的切分。

    • ccs_minimize_roundtrips 默认为 false,且是唯一支持的值。

    !> 警告 异步搜索不支持仅包含建议部分的滚动或搜索请求。仅当 ccs_minimize_roundtrips 设置为 false 时,才支持跨群集搜索。

    ?> 注意 默认情况下,7.x 版本 Elasticsearch 不会限制存储的异步搜索响应的大小。存储大量异步响应可能会破坏集群的稳定性。如果要设置最大允许大小的限制,请更改搜 search.max_async_search_response_size 集群级设置。之后,尝试存储大于此设置的异步响应将导致错误。

    获取异步搜索

    获取异步搜索 API 根据之前提交的异步搜索请求的 id 检索其结果。如果启用了 Elasticsearch 安全功能,则对特定异步搜索结果的访问仅限于提交该请求的用户或 API 密钥。

    1. GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
    1. {
    2. "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
    3. "is_partial" : true,
    4. "is_running" : true,
    5. "start_time_in_millis" : 1583945890986,
    6. "expiration_time_in_millis" : 1584377890986,
    7. "response" : {
    8. "took" : 12144,
    9. "timed_out" : false,
    10. "num_reduce_phases" : 46,
    11. "_shards" : {
    12. "total" : 562,
    13. "successful" : 188,
    14. "skipped" : 0,
    15. "failed" : 0
    16. },
    17. "hits" : {
    18. "total" : {
    19. "value" : 456433,
    20. "relation" : "eq"
    21. },
    22. "max_score" : null,
    23. "hits" : [ ]
    24. },
    25. "aggregations" : {
    26. "sale_date" : {
    27. "buckets" : []
    28. }
    29. }
    30. }
    31. }
    1. "is_partial" : true:当查询不再运行时,指示在所有分片上搜索是失败还是成功完成。执行查询时,is_partial 始终设置为 true
    2. "is_running" : true:搜索是否仍在执行或已完成
    3. "expiration_time_in_millis" : 1584377890986:异步搜索将在何时过期
    4. "num_reduce_phases" : 46:表示已执行了多少次结果缩减。如果与上次检索的结果相比,这个数字增加了,那么你可以期望搜索响应中包含更多的结果
    5. "successful" : 188:指示已执行查询的分片数。请注意,为了将碎片结果包含在搜索响应中,需要首先减少分片结果。
    6. "aggregations" :部分聚合结果,来自已完成查询执行的分片。

    调用获取异步搜索 API 时,还可以提供 wait_for_completion_timeout 参数,以便在提供的超时之前等待搜索完成。如果在超时过期之前可用,将返回最终结果,否则在超时过期后将返回当前可用的结果。默认情况下,未设置超时,这意味着将返回当前可用的结果,而无需任何额外等待。

    keep_alive 参数指定异步搜索在集群中的可用时间。未指定时,将使用带有相应提交异步请求的 keep_alive 集。否则,可以覆盖该值并扩展请求的有效性。此期限到期后,如果搜索仍在运行,将取消搜索。如果搜索完成,其保存的结果将被删除。

    获取异步搜索状态

    获取异步搜索状态 API 不检索搜索结果,只显示之前提交的异步搜索请求的状态(给定其 id)。如果启用了 Elasticsearch 安全功能,则对获取异步搜索状态 API 的访问仅限于监视用户(monitoring_user)角色。

    1. GET /_async_search/status/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
    1. {
    2. "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
    3. "is_running" : true,
    4. "is_partial" : true,
    5. "start_time_in_millis" : 1583945890986,
    6. "expiration_time_in_millis" : 1584377890986,
    7. "_shards" : {
    8. "total" : 562,
    9. "successful" : 188,
    10. "skipped" : 0,
    11. "failed" : 0
    12. }
    13. }
    1. "successful" : 188:指示到目前为止已执行查询的分片数。

    对于已完成的异步搜索,状态响应有一个额外的 completion_status 字段,显示已完成异步搜索的状态代码。

    1. {
    2. "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
    3. "is_running" : false,
    4. "is_partial" : false,
    5. "start_time_in_millis" : 1583945890986,
    6. "expiration_time_in_millis" : 1584377890986,
    7. "_shards" : {
    8. "total" : 562,
    9. "successful" : 562,
    10. "skipped" : 0,
    11. "failed" : 0
    12. },
    13. "completion_status" : 200
    14. }
    1. "completion_status" : 200:指示异步搜索已成功完成。
    1. {
    2. "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
    3. "is_running" : false,
    4. "is_partial" : true,
    5. "start_time_in_millis" : 1583945890986,
    6. "expiration_time_in_millis" : 1584377890986,
    7. "_shards" : {
    8. "total" : 562,
    9. "successful" : 450,
    10. "skipped" : 0,
    11. "failed" : 112
    12. },
    13. "completion_status" : 503
    14. }
    1. "completion_status" : 503:指示异步搜索已完成,但出现错误。

    删除异步搜索

    你可以使用删除异步搜索 API 按 ID 手动删除异步搜索。如果搜索仍在运行,搜索请求将被取消。否则,保存的搜索结果将被删除。

    1. DELETE /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=

    如果启用了 Elasticsearch 安全功能,则特定异步搜索的删除仅限于:*, 提交原始搜索请求的经过身份验证的用户。* 具有 cancel_task 集群权限的用户。

    原文链接

    评论:0   参与:  0