ElasticSearch多个滚动Java API
我想从索引中获取所有数据。由于项数太大而无法存储,因此我使用了Scroll(很好的功能):
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
多次,因此无法并行滚动多次。
我找到了http://elasticsearch-users.115913.n3.nabble.com/Multiple-scrolls-
simultanious-td4024191.html,其中指出这是可能的-尽管我不知道他与ES的隶属关系。
难道我做错了什么?
回答:
搜索更多之后,我得到的印象是(相同scrollId
)是设计使然。超时到期后(每次调用Elasticsearch扫描并滚动后将其重置-添加到新索引)。
因此,每个索引只能获得一个打开的滚动。
https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/search-
request-
scroll.html指出:
滚动并不是为了实时用户请求,而是为了处理大量数据,例如为了将一个索引的内容重新索引为具有不同配置的新索引。
因此,似乎我想要的不是故意的选项-可能是由于优化。
如前所述创建多个卷轴不能这样做,但是当你使用滚动查询是一样的,这是唯一的真实。如果你scroll
的,例如,另一个type
,index
或只是一个query
,你可以有多个scrolls
以上是 ElasticSearch多个滚动Java API 的全部内容, 来源链接: utcz.com/qa/425225.html