我想从索引中获取所有数据。由于项目数量对于内存来说太大,我使用滚动(很好的功能):
client.prepareSearch(index)
.setTypes(myType).setSearchType(SearchType.SCAN)
.setScroll(new TimeValue(60000))
.setSize(amountPerCall)
.setQuery(MatchAll())
.execute().actionGet();
调用时效果很好:
client.prepareSearchScroll(scrollId)
.setScroll(new TimeValue(600000))
.execute().actionGet()
但是,当我多次调用前一个方法时,我得到了相同的结果scrollId
多次,因此我无法并行滚动多次。
I found http://elasticsearch-users.115913.n3.nabble.com/Multiple-scrolls-simultanious-td4024191.html http://elasticsearch-users.115913.n3.nabble.com/Multiple-scrolls-simultanious-td4024191.html其中指出这是可能的 - 尽管我不知道他与 ES 的隶属关系。
难道我做错了什么?
经过更多搜索后,我的印象是这(相同scrollId
)是设计使然。超时到期后(每次调用后都会重置)Elasticsearch 扫描和滚动 - 添加到新索引 https://stackoverflow.com/questions/28844530/elasticsearch-scan-and-scroll-add-to-new-index).
因此,每个索引只能获得一个打开的卷轴。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html states:
滚动并不是为了实时用户请求,而是为了
处理大量数据,例如为了重新索引
将一个索引的内容转换为具有不同配置的新索引。
所以看来我想要的不是一个选项,故意的 - 可能是因为优化。
Update
如前所述,无法创建多个滚动,但这仅当您用于滚动的查询相同时才是正确的。如果你scroll
例如,对于另一个type
, index
,或者只是另一个query
,你可以有多个scrolls
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)