2015-06-18 58 views
3

我想從索引獲取所有數據。由於項目的數量是足夠大的內存我使用Scroll(好的功能):ElasticSearch多個滾動Java API

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的隸屬關係。

我做錯了什麼?

+0

HTTP的相關問題: //stackoverflow.com/questions/25453872/why-does-this-elasticsearch-scan-and-scroll-keep-returning-the-same-scroll-id – Danielson

回答

2

經過多次搜索後,我得到了這樣的印象(相同scrollId)是由設計。超時後(在每次調用Elasticsearch scan and scroll - add to new index後重置)。

因此,每個索引只能打開一個滾動條。

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html狀態:

滾動不用於實時的用戶請求,而是對於 處理大量數據,例如的以便將一個索引的 內容重新索引到具有不同配置的新索引中。

因此,看起來我想要的不是一種選擇,有意 - 可能是因爲優化。

更新
如前所述創建多個卷軸不能這樣做,但是當你使用滾動查詢是一樣的,這是唯一的真實。如果您對scroll,例如,另一個typeindex,或只是一個query,你可以有多個scrolls

0

您可以滾動同一時間在同一指數,這是elasticsearch-Hadoop的一樣。

只是,不要忘記,引擎蓋下,指數是由那些擁有數據的多個碎片,這樣你就可以通過滾動並行每個碎片:

.setPreference("_shards:1")