一尘不染

ElasticSearch多个滚动Java API

elasticsearch

我想从索引中获取所有数据。由于项数太大而无法存储,因此我使用了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的隶属关系。

难道我做错了什么?


阅读 632

收藏
2020-06-22

共1个答案

一尘不染

搜索更多之后,我得到的印象是(相同scrollId)是设计使然。超时到期后(每次调用Elasticsearch扫描并滚动后将其重置-添加到新索引)。

因此,每个索引只能获得一个打开的滚动。

https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/search-
request-
scroll.html指出:

滚动并不是为了实时用户请求,而是为了处理大量数据,例如为了将一个索引的内容重新索引为具有不同配置的新索引。

因此,似乎我想要的不是故意的选项-可能是由于优化。

更新
如前所述创建多个卷轴不能这样做,但是当你使用滚动查询是一样的,这是唯一的真实。如果你scroll的,例如,另一个typeindex或只是一个query,你可以有多个scrolls

2020-06-22