2016-11-15 98 views
1

我对ElasticSearch比较新,我注意到当你启动elasticsearch Java Client时,它启动了大量的线程(〜50)。ElasticSearch Java API异步书写

我试图利用这一点,购买找不到一种方式,以异步写入(索引)ES。

官方API的建议是使用:

IndexResponse response = client.prepareIndex(indexName, documentName) 
      .setSource(mapper.writeValueAsString(data)) 
      .get(); 

即使我有这个运行在一个新的线程它仍然封锁,因为它等待响应,包含新创建的ID等等。

是否可以以异步方式写入ES,而不必创建另外50个本地线程来匹配ES内部的50个本地线程?

回答

1

如果有人绊倒了这一点,解决方案是使用.execute(),它返回ListenableActionFuture<Response>

例如

client.prepareIndex(indexName, documentName) 
     .setSource(mapper.writeValueAsString(data)) 
     .execute();