Я использую elasticsearch (версия ES 5) для прокрутки API, чтобы получить все документы, а затем записать в файл csv. Мой код, как показано ниже. Это работает, однако есть небольшая проблема. Загрузка файла занимает более 5 минут.
try
{
TransportClient client = getTransportClient( NoSQLConnectionPool.ELASTIC_STAT );
if( client != null )
{
SearchResponse scrollResp = client.prepareSearch( Constants.INDEX )
.addSort( fieldSort( Constants.PRICE ).order( ASC ) )
.setScroll( new TimeValue( 60000 ) )
.setQuery( buildBoolQuery( request ) )
.setSize( 100 ).get(); //max of 100 hits will be returned for each scroll
//Scroll until no hits are returned
do
{
List<JsonElement> list = getAllElement( scrollResp.getHits().getHits() );
// resultsList.addAll( results );
buildReportContent( sb, list ); //iterate list and append data to string builder(sb)
scrollResp = client.prepareSearchScroll( scrollResp.getScrollId() ).setScroll( new TimeValue( 60000 ) ).execute().actionGet();
}
while( scrollResp.getHits().getHits().length != 0 ); // Zero hits mark the end of the scroll and the while loop.
}
return CsvFileWriter.csvFileWrite( sb );
}
catch ( Exception e )
{
e.printStackTrace();
}
Любые предложения, чтобы сделать это более эффективно?
Спасибо!