【问题标题】:How to scroll Data using Scroll API elasticsearch如何使用 Scroll API elasticsearch 滚动数据
【发布时间】:2020-11-06 04:23:25
【问题描述】:

我是 elk stack 的新手

  • 我已经从this 尝试过,但没有得到工作流程..

  • 例如在搜索查询下方执行

POST <index-name>/_search?scroll=2m
{
  "query": {"match_all": {}}
}
  • 并从此查询中获取了 scroll_id,然后尝试检索下一批结果以进行滚动搜索。使用此
GET /_search/scroll
{
  "scroll_id" : "<scroll_id>"
}
  • 第一次得到结果
"took" : 2,
  "timed_out" : false,
  "terminated_early" : true,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 13059,
      "relation" : "eq"
    }
  • 我的问题是为什么当我尝试使用相同的 scroll_id 再次滚动时出现错误
"caused_by" : {
      "type" : "search_context_missing_exception",
      "reason" : "No search context found for id"
  • 使用的版本
Kibana 7.9.3
Elastic Search 7.9.3

【问题讨论】:

    标签: elasticsearch kibana elastic-stack


    【解决方案1】:

    scroll_id 值在每个响应中都会发生变化。所以下一个搜索调用需要使用上一个搜索响应中的新滚动 id。

    你的开始是正确的

    POST <index-name>/_search?scroll=2m
    {
      "query": {"match_all": {}}
    }
    

    在您收到的响应中,一个名为 _scroll_id 的字段包含用于下一次调用的下一个滚动 ID(如光标),我们称之为 scroll_id_1

    GET /_search/scroll
    {
      "scroll_id" : "<scroll_id_1>",
      "scroll": "2m"
    }
    

    在下一个响应中,您将获得一个新的_scroll_id 值(我们称之为scroll_id_2),您需要将其用于下一次调用:

    GET /_search/scroll
    {
      "scroll_id" : "<scroll_id_2>",
      "scroll": "2m"
    }
    

    你一直这样做,直到你得到一个空的结果集,此时你可以清除搜索上下文

    DELETE /_search/scroll
    {
      "scroll_id" : "<scroll_id_n>"
    }
    

    【讨论】:

    • 但是当我执行这个GET /_search/scroll { "scroll_id" : "&lt;scroll_id_1&gt;" }时我没有得到scroll_id_2,有问题附上错误
    • 响应正文中的字段名为_scroll_id
    • 对不起,但没有得到你想要传达的内容
    • 你用的是哪个版本?
    • 确保在每个请求中指定滚动时间。
    猜你喜欢
    • 2016-07-09
    • 2019-09-26
    • 2017-02-12
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多