簡體   English   中英

ElasticSearch Multiple Scrolls Java API

[英]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查找其他typeindex或其他query ,則可以有多個scrolls

你可以同時滾動同一個索引,這就是elasticsearch-hadoop所做的。

只是,不要忘記在引擎蓋下,索引由多個擁有數據的分片組成,因此您可以使用以下方法並行滾動每個分片:

.setPreference("_shards:1")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM