【Elastic Engineering】Elasticsearch:异步搜索 - async search

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Elasticsearch:异步搜索 - async search

作者:刘晓国


Elasticsearch 通常允许你快速搜索大量数据。 在某些情况下,搜索可能在许多 shard 上执行,可能针对 frozen indices (冻结的索引)及跨越多个远程集群 (remote clusters),因此预期结果不会在毫秒内返回。 当你需要执行长时间运行的搜索时,同步等待返回结果是不理想的。 相反,异步搜索使你可以提交异步执行的搜索请求,监视请求的进度,并在以后的阶段检索结果。 你也可以在部分结果可用时但在搜索完成之前检索它们。


你可以使用提交异步搜索 API 提交异步搜索请求。 使用 get async search API,你可以监视异步搜索请求的进度并检索其结果。 正在进行的异步搜索可以通过 Delete async search API 删除。

Asyncimage.png search


异步搜索 API 使您可以异步执行搜索请求,监视其进度以及在部分结果可用时检索它们。


提交 async search API


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

POST /sales*/_async_search?size=0
{
  "sort": [
    { "date": { "order": "asc" } }
  ],
  "aggs": {
    "sale_date": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "1d"
      }
    }
  }
}

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

{
  "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",  (1)
  "is_partial" : true, (2) 
  "is_running" : true, (3)
  "start_time_in_millis" : 1583945890986,
  "expiration_time_in_millis" : 1584377890986,
  "response" : {
    "took" : 1122,
    "timed_out" : false,
    "num_reduce_phases" : 0,
    "_shards" : {
      "total" : 562, (4)
      "successful" : 3, (5)
      "skipped" : 0,
      "failed" : 0
    },
    "hits" : {
      "total" : {
        "value" : 157483, (6)
        "relation" : "gte"
      },
      "max_score" : null,
      "hits" : [ ]
    }
  }
}


1.异步搜索的标识符,可用于监视其进度,检索其结果和/或将其删除

2.当查询不再运行时,指示在所有分片上搜索是失败还是成功完成。 在查询正在被执行时,is_partial 始终设置为 true

3.搜索是仍在执行还是已完成

4.总体上将对多少个分片执行搜索

5.有多少碎片已成功完成搜索

6.当前有多少文件与查询匹配,属于已经完成搜索的分片


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


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


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


注意:当结果的主要排序是一个被索引字段时,分片将根据它们对该字段持有的最小值和最大值进行排序,因此,可以根据请求的排序标准获得部分结果。


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


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

2.request_cache 默认为 true

3.pre_filter_shard_size 的默认值为1,并且不能更改:这是为了强制执行一次预过滤器往返操作以从每个分片中检索统计信息,从而使那些肯定不保存与查询匹配的文档的数据被跳过。

4.ccs_minimize_roundtrips 默认为 false,这也是唯一受支持的值


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


获取 async search


给定其 ID,获取  async search API 会检索先前提交的异步搜索请求的结果。 如果启用了 Elasticsearch 安全功能。 特定异步搜索结果的访问仅限于首先提交它的用户。

GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
{
  "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
  "is_partial" : true,  (1)
  "is_running" : true,  (2)
  "start_time_in_millis" : 1583945890986,
  "expiration_time_in_millis" : 1584377890986, (3) 
  "response" : {
    "took" : 12144,
    "timed_out" : false,
    "num_reduce_phases" : 46, (4)
    "_shards" : {
      "total" : 562, (5)
      "successful" : 188,
      "skipped" : 0,
      "failed" : 0
    },
    "hits" : {
      "total" : {
        "value" : 456433,
        "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
    },
    "aggregations" : { (6)
      "sale_date" :  {
        "buckets" : []
      }
    }
  }
}

1.当查询不再运行时,指示在所有分片上搜索是失败还是成功完成。在执行查询时,is_partial 始终设置为 true

2.搜索是仍在执行还是已完成

3.异步搜索何时到期

4.指示执行了多少次结果缩减。如果该数字与上次检索到的结果相比有所增加,则可以预期搜索结果中将包含更多的结果

5.指示有多少个 shard 执行了查询。请注意,为了将 shard 结果包含在搜索响应中,需要首先减少 shard 结果。

6.来自已经完成查询执行的分片的部分聚合结果。


在调用 Get Async Search API 时,也可以提供 wait_for_completion_timeout 参数,以等待搜索完成直到提供的超时。如果超时到期,将返回最终结果(如果有),否则超时到期后将返回当前可用的结果。默认情况下,未设置超时,这意味着将返回当前可用的结果,而无需任何额外的等待。


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


删除 async search


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

DELETE /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=


参考


【1】 https://www.elastic.co/guide/en/elasticsearch/reference/master/async-search.html


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
4月前
|
存储 安全 Linux
Elasticsearch Enterprise 9.0 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.0 (macOS, Linux, Windows) - 分布式搜索和分析引擎
215 0
|
4月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 8.18 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 8.18 (macOS, Linux, Windows) - 分布式搜索和分析引擎
133 0
|
8月前
|
人工智能 自然语言处理 搜索推荐
云端问道12期实操教学-构建基于Elasticsearch的企业级AI搜索应用
本文介绍了构建基于Elasticsearch的企业级AI搜索应用,涵盖了从传统关键词匹配到对话式问答的搜索形态演变。阿里云的AI搜索产品依托自研和开源(如Elasticsearch)引擎,提供高性能检索服务,支持千亿级数据毫秒响应。文章重点描述了AI搜索的三个核心关键点:精准结果、语义理解、高性能引擎,并展示了架构升级和典型应用场景,包括智能问答、电商导购、多模态图书及商品搜索等。通过实验部分,详细演示了如何使用阿里云ES搭建AI语义搜索Demo,涵盖模型创建、Pipeline配置、数据写入与检索测试等步骤,同时介绍了相关的计费模式。
236 3
|
8月前
|
人工智能 算法 API
构建基于 Elasticsearch 的企业级 AI 搜索应用
本文介绍了基于Elasticsearch构建企业级AI搜索应用的方案,重点讲解了RAG(检索增强生成)架构的实现。通过阿里云上的Elasticsearch AI搜索平台,简化了知识库文档抽取、文本切片等复杂流程,并结合稠密和稀疏向量的混合搜索技术,提升了召回和排序的准确性。此外,还探讨了Elastic的向量数据库优化措施及推理API的应用,展示了如何在云端高效实现精准的搜索与推理服务。未来将拓展至多模态数据和知识图谱,进一步提升RAG效果。
318 1
|
8月前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案。
727 5
|
4月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
2065 0
|
5月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
877 1
|
10月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
403 5
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
11月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
1074 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。

相关产品

  • 检索分析服务 Elasticsearch版