前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch使用:Search After API

Elasticsearch使用:Search After API

原创
作者头像
HLee
修改2021-02-03 18:00:29
4.9K0
修改2021-02-03 18:00:29
举报
文章被收录于专栏:房东的猫房东的猫

简介

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-search-after.html

一般的分页需求我们可以使用form和size的方式实现,但是这种分页方式在深度分页的场景下应该是要避免使用的。深度分页会随着请求的页次增加,所消耗的内存和时间的增长也是成比例的增加,为了避免深度分页产生的问题,elasticsearch从2.0版本开始,增加了一个限制:索引设置max_result_window默认值为10,000是一个保障,搜索请求占用堆内存和时间与from +size成比例。建议使用滚动Scroll api进行有效的深度滚动,但是滚动上下文开销很大,不建议将其用于实时用户请求。search_after参数提供了一个活动游标,从而绕过了这个问题。其思想是使用来自前一页的结果来帮助检索下一页。

代码语言:javascript
复制
index.max_result_window =10000

Search After

代码语言:javascript
复制
GET regroupmembers/_search
{
  "size": 2,
  "query": {
    "match": {
      "province": "山东"
    }
  },
  "sort": [
    {
      "updatetime": "asc"
    },
    {
      "_id": "asc"
    }
  ]
}

每个文档具有一个唯一值的字段应该用作排序规范的仲裁器。否则,具有相同排序值的文档的排序顺序将是未定义的。建议的方法是使用字段_id,它肯定包含每个文档的一个唯一值。

上面的请求会为每一个文档返回一个包含sort排序值的数组。这些sort排序值可以被用于 search_after 参数里以便抓取下一页的数据。比如,我们可以使用最后的一个文档的sort排序值,将它传递给 search_after 参数:

代码语言:javascript
复制
GET regroupmembers/_search
{
  "size": 2,
  "query": {
    "match": {
      "province": "山东"
    }
  },
  "search_after": [1587748455000, "6582877429_7918890798_p"],
  "sort": [
    {
      "updatetime": "asc"
    },
    {
      "_id": "asc"
    }
  ]
}
注意:sort中的参数值要和search_after一一对应(数量&顺序的对应)。

当我们使用 search_after 参数的时候,from参数必须被设置成 0 或 -1 (当然你也可以不设置这个from参数)。

search_after并不是自由跳转到随机页面的解决方案,而是并行滚动许多查询。 它与滚动API非常相似,但与之不同的是,search_after参数是无状态的,始终会针对最新版本的搜索程序进行解析。 因此,排序顺序可能会在步行过程中更改,具体取决于索引的更新和删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • Search After
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档