一个
,这种行为就像你在一个传统数据库内使用一个游标一样。
scrolling目的不是为了实用用户请求,而是为了处理大量数据。比如为了将一个索引的内容重新插入到一个具有不同配置的新索引中。
scroll
为了使用)。比如scroll=1m
curl -XGET 'localhost:9200/twitter/tweet/_search?scroll=1m' -d '{"query": {"match" : {"title" : "elasticsearch"}}}'
"_scroll_id" : "cXVlcnlUaGVuRmV0Y2g7NTs2OkZlNEJsY014VHBHVFNEelA0ZlI3Ync7NzpGZTRCbGNNeFRwR1RTRHpQNGZSN2J3Ozg6RmU0QmxjTXhUcEdUU0R6UDRmUjdidzs5OkZlNEJsY014VHBHVFNEelA0ZlI3Ync7MTA6RmU0QmxjTXhUcEdUU0R6UDRmUjdidzswOw==", "took" : 1, "timed_out" : false, "_shards" : {"total" : 5,"successful" : 5,"failed" : 0 }, "hits" : {"total" : 0,"max_score" : null,"hits" : [ ] }
curl -XGET 'localhost:9200/_search/scroll?scroll=1m' \-d‘cXVlcnlUaGVuRmV0Y2g7NTs2OkZlNEJsY014VHBHVFNEelA0ZlI3Ync7NzpGZTRCbGNNeFRwR1RTRHpQNGZSN2J3Ozg6RmU0QmxjTXhUcEdUU0R6UDRmUjdidzs5OkZlNEJsY014VHBHVFNEelA0ZlI3Ync7MTA6RmU0QmxjTXhUcEdUU0R6UDRmUjdidzswOw==’
URL
scroll
scroll_id’scroll_id’=传递。
每一次对
初始
切记:如果请求指定了聚合,那么只有初始的search返回会包含聚合结果。
使用
在这个例子中,使用
scrollAPI能够跟踪已经返回的那些结果,因此能够比深度分页更加有效的返回已排序好的结果。然而,对结果排序(默认会执行)仍然有代价
通常来说,,你仅仅想要检索所有结果而不在乎顺序。Scrolling能够合并扫描查询类型来取消评分和排序,以最可能有效的方法返回结果。
curl 'localhost:9200/twitter/tweet/_search?scroll=1m&search_type=scan' ①-d '{"query": {"match" : {"title" : "elasticsearch"}}}'①将search_type设置为scan,禁止了排序,使得scrolling更有效。
一个扫描
1.不计算分值,不排序。索引中是怎么样的顺序,返回的结果就是什么顺序;
2.不支持聚合。
3.
4.size
如果你想评分,即使没有排序,将
保持搜索上下文活跃
scroll
通常,后台合并进程通过将很小的分块合并成新的更大的分块,同时小分块被删除的方法来优化索引。在scrolling期间,这个进程会继续。
请求的结果的原因。
保持旧的分块活跃意味着需要更多文件句柄。所以要确保你在节点中配置了足够空闲的文件句柄。
可以使用节点statsAPI查看开放了多少个搜索上下文:
curl -XGET localhost:9200/_nodes/stats/indices/search?pretty
清除scrollAPI
当已经检索出所有结果或者
curl -XDELETE localhost:9200/_search/scroll \-d 'c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1'
scroll_id
多个scrollID能够已逗号分开的值来传递。
curl -XDELETE localhost:9200/_search/scroll \-d 'c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1,aGVuRmV0Y2g7NTsxOnkxaDZ'
所有搜索上下文能够通过_all参数一次删除:
curl -XDELETE localhost:9200/_search/scroll/_all原文:
可以提高你的水平。(戏从对手来。