zoukankan      html  css  js  c++  java
  • ElasticSearch解决深度分页性能存在的问题使用scoll来解决

     现在我们全局搜索全部的数据,每次返回3条,

    从 scroll 请求返回的结果反映了 search 发生时刻的索引状态,就像一个快照。后续的对文档的改动(索引、更新或者删除)都只会影响后面的搜索请求。

    为了使用 scroll,初始搜索请求应该在查询中指定 scroll 参数,这可以告诉 Elasticsearch 需要保持搜索的上下文环境多久(参考Keeping the search context alive),如 ?scroll=1m。这里1m表示使用1分钟

    使用上面的请求返回的结果中包含一个 scroll_id,这个 ID 可以被传递给 scroll API 来检索下一个批次的结果。

    scroll 深分页
    from+size查询在10000-50000条数据(1000到5000页)以内的时候还是可以的,但是如果数据过多的话,就会出现深分页问题。

    为了解决上面的问题,elasticsearch提出了一个scroll滚动的方式。
    scroll 类似于sql中的cursor,使用scroll,每次只能获取一页的内容,然后会返回一个scroll_id。根据返回的这个scroll_id可以不断地获取下一页的内容,所以scroll并不适用于有跳页的情景。

    GET test_dev/_search?scroll=5m
    {
      "query": {
        "bool": {
          "filter": [
            {
              "term": {
                "age": 28
              }
            }
          ]
        }
      },
      "size": 10,
      "from": 0,
      "sort": [
        {
          "timestamp": {
            "order": "desc"
          },
          "_id": {
            "order": "desc"
          }
        }
      ]
    }
    1. scroll=5m表示设置scroll_id保留5分钟可用。
    2. 使用scroll必须要将from设置为0。
    3. size决定后面每次调用_search搜索返回的数量

    然后我们可以通过数据返回的_scroll_id读取下一页内容,每次请求将会读取下10条数据,直到数据读取完毕或者scroll_id保留时间截止:

    GET _search/scroll
    {
      "scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAJZ9Fnk1d......",
      "scroll": "5m"
    }

    注意:请求的接口不再使用索引名了,而是 _search/scroll,其中GET和POST方法都可以使用。

    scroll删除
    根据官方文档的说法,scroll的搜索上下文会在scroll的保留时间截止后自动清除,但是我们知道scroll是非常消耗资源的,所以一个建议就是当不需要了scroll数据的时候,尽可能快的把scroll_id显式删除掉。

    清除指定的scroll_id:

    清除指定的scroll_id:

    DELETE _search/scroll/DnF1ZXJ5VGhlbkZldGNo.....
     

    清除所有的scroll:

    DELETE _search/scroll/_all
  • 相关阅读:
    MySQL 查询树结构、循环查询、查看函数、视图、存储过程
    SpringBoot 部署:外置依赖包
    springboot集成docker实现自动化构建镜像说明
    Chrome谷歌浏览器常用快捷键、开发技巧
    Windows常用CMD命令
    Git 版本管理,与 SVN区别对比
    TensorFlow重新导入restore报错: OP_REQUIRES failed at save_restore_v2_ops.cc:184 : Not found: Key Variable not found in checkpoint
    MySQL字符集设置
    Hive 时间操作
    深度思考:如何规划你的职业生涯
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/13022217.html
Copyright © 2011-2022 走看看