[英]ElasticSearch Multiple Scrolls Java API
我想從索引中獲取所有數據。 由於項目數量對於內存而言太大,我使用Scroll(nice函數):
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/en/elasticsearch/reference/current/search-request-scroll.html聲明:
滾動不是針對實時用戶請求,而是針對處理大量數據,例如為了將一個索引的內容重新索引到具有不同配置的新索引中。
所以看起來我想要的不是一個選擇,故意 - 可能是因為優化。
更新
如上所述,無法創建多個滾動,但僅當用於滾動的查詢相同時才會這樣。 例如,如果您scroll
查找其他type
, index
或其他query
,則可以有多個scrolls
你可以同時滾動同一個索引,這就是elasticsearch-hadoop所做的。
只是,不要忘記在引擎蓋下,索引由多個擁有數據的分片組成,因此您可以使用以下方法並行滾動每個分片:
.setPreference("_shards:1")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.