es中的scan and scroll搜索

原创 2015年11月18日 14:40:44

在es上搜索数据时,默认es只会返回10条文档,当我们想获取更多结果,或者只要结果中的一个区间的数据时,可以通过szie和from来指定。

GET /_search?size=3&from=20
如上的查询语句,会返回排序后的结果中第20到第22条数据。es在收到这样的一个请求之后,每一个分片都会返回一个top22的搜索结果,然后将这些结果汇总排序,再选出top22,最后取第20到第22条数据作为结果返回。


这样会带来一个问题,当我们搜索的时候,如果想取出第10001条数据,那么就相当于每个一分片都要对数据进行排序,取出前10001条文档,然后es再将这些结果汇总再次排序,之后取出第10001条数据。这样对于es来说就会产生相当大的资源和性能开销。如果我们不要求es对结果进行排序,那么就会消耗很少的资源,所以针对此种情况,es提供了scan and scroll的搜索方式。

GET /old_index/_search?search_type=scan&scroll=1m 
{
    "query": { "match_all": {}},
    "size":  1000
}
我们可以首先通过如上的请求发起一个搜索,但是这个请求不会返回任何文档,它会返回一个_scroll_id,接下来我们再通过这个id来从es中读取数据:

GET /_search/scroll?scroll=1m 
c2Nhbjs1OzExODpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExOTpRNV9aY1VyUVM4U0 
NMd2pjWlJ3YWlBOzExNjpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExNzpRNV9aY1Vy
UVM4U0NMd2pjWlJ3YWlBOzEyMDpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzE7dG90YW
xfaGl0czoxOw==
此时除了会返回搜索结果以外,还会再次返回一个_scroll_id,当我们下次继续取数据时,需要用最新的id。


相关文章推荐

elasticsearch 分页 (from+size)(scroll scan) (search after) 详解-->解决深分页 (持续更新)

学习交流QQ群:481223144官方参考Guide https://www.elastic.co/guide/en/elasticsearch/guide/2.x/scroll.html Ref...
  • slml08
  • slml08
  • 2017年01月05日 18:12
  • 13913

elasticsearch-利用游标查询 'Scroll'来做分页查询

游标查询 'Scroll' scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价。 游标查询允许我们 先做查询初始化,然...

es中的scan and scroll搜索

在es上搜索数据时,默认es只会返回10条文档,当我们想获取更多结果,或者只要结果中的一个区间的数据时,可以通过szie和from来指定。 [plain] view plain co...

Elasticsearch--scan and scroll

scan(扫描)搜索类型是和scroll(滚屏)一起使用来从Elasticsearch里高效地连续性取回巨大数量的结果而不需要付出深分页的代价。...

from-size VS scroll-scan

1.from-size ElasticSearch可以用一种分页的形式来查询数据——from-size,https://www.elastic.co/guide/en/elasticsearch/re...

Elasticsearch Scroll (游标)API详解

分类:全文索引 (423) (0) 举报 收藏 http://www.16php.com/archives/380 今天我们来探讨一下Elasticsearch Scr...

Elasticsearch使用Scroll-Scan实现数据遍历

Elasticsearch 是一个实时的分布式搜索与分析引擎,被广泛用来做全文搜索、结构化搜索、结果分析。在实际应用中有时需要遍历某个索引的全部数据,这时使用分页检索的形式效率会比较差。      ...

[ElasticSearch]Java API 之 滚动搜索(Scroll API)

一般搜索请求都是返回一"页"数据,无论数据量多大都一起返回给用户,Scroll API可以允许我们检索大量数据(甚至全部数据)。Scroll API允许我们做一个初始阶段搜索并且持续批量从Elasti...

elasticsearch 使用scroll_id查询,为什么每次查询结果相同

使用elasticsearch 2.4 版本,想分页遍历所有的文档,因为 from + size 有范围限制,且效率低下,因此采用 scroll,代码如下,结果每次打印出来的数据一模一样,但是scro...

es的scroll api使用

MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("app",app); SearchQuery query = ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:es中的scan and scroll搜索
举报原因:
原因补充:

(最多只允许输入30个字)