scroll search
传统数据库游标:游标(cursor)是系统为用户开设的一个数据缓冲区,存在sql语句的执行结果,每个游标区都有一个名字,用户可以用sql语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
游标:一段私有的sql工作区,也就是一段内存区域,用于暂时存放受sql语句影响到的数据。通俗理解就是收影响的数据暂时存放到一个内存区域的续表中,而这个续表就是游标。
游标过程:Es为每个请求做一些操作,可以用做操作的同时存储信息,相当于创建了一个快照。
游标缺点:从scoll请求返回结果反映了search发生时刻的索引状态,后续对文档的改动(索引、更新或者删除)都只会影响后面的搜索请求。
-
游标使用:游标生效时间为1分钟,超过1分钟,游标失效。
GET /product/_search?scroll=1m { "query": { "match_all": {} } , "from": 0 , "size": 2 } // 返回结果 { "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAHhVIWWW9LX1JFWlFSenVZVkc3Z2k0TXFDZw==", "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "product", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "name" : "xiaomi phone", "desc" : "shouji zhong de zhandouji", "price" : 3999, "tags" : [ "xingjiabi", "fashao", "buka" ] } }, { "_index" : "product", "_type" : "_doc", "_id" : "2", "_score" : 1.0, "_source" : { "name" : "xiaomi nfc phone", "desc" : "zhichi quangongneng nfc,shouji zhong de jianjiji", "price" : 4999, "tags" : [ "xingjiabi", "fashao", "gongjiaoka" ] } } ] } }
下一页
#这里不需要加index了 每次加上上一次的scroll_id,并且刷新游标(时间窗口),使用完关闭
GET _search/scroll
{
"scroll":"1m"
,"scroll_id":"DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAHhbEWWW9LX1JFWlFSenVZVkc3Z2k0TXFDZw=="
}