如何使用scroll api elasticsearch滚动数据

a8jjtwal  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(405)

我是新来的麋鹿堆栈
我试过了,但没有得到工作流程。。
例如,执行下面的搜索查询

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

并从此查询中获取滚动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"
    }

我的问题是,为什么我得到错误时,我试图再次滚动使用相同的滚动id

"caused_by" : {
      "type" : "search_context_missing_exception",
      "reason" : "No search context found for id"

使用的版本

Kibana 7.9.3
Elastic Search 7.9.3
7gs2gvoe

7gs2gvoe1#

这个 scroll_id 价值观在每个React中都会发生变化。因此,下一个搜索调用需要使用上一个搜索响应中的新滚动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"
}

在下一个React中,你会得到一个新的答案 _scroll_id 价值(我们称之为 scroll_id_2 )您需要在下次通话中使用它:

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

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

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

相关问题