AWS ElasticSearch 2.3 Java HTTP批量API

问题描述:

我正在使用AWS ElasticSearch 2.3中的Java中的批量HTTP API。 当我使用REST客户端,为德批量加载,我得到以下错误:AWS ElasticSearch 2.3 Java HTTP批量API

504 GATEWAY_TIMEOUT 

当我运行它LAMBDA在Java中,HTTP的帖子,我得到:

{ 
    "errorMessage": "2017-01-09T19:05:32.925Z 8e8164a7-d69e-11e6-8954-f3ac8e70b5be Task timed out after 15.00 seconds" 
} 

通过测试我注意到,大宗原料药不调整这些设置这些:

"number_of_shards" : 5, 
    "number_of_replicas" : 5 

当碎片和副本都设置为1,我可以做一个批量加载没有问题。 我一直在使用此设置以使我的批量加载尝试:

"refresh_interval" : -1 

但到目前为止,它在所有做没有任何影响。在Java Lambda中,我将数据作为来自S3位置的InputStream加载。 对于Java HTTP,我现在有什么选择? 还有什么我可以尝试的索引设置? 我可以尝试AWS访问策略中的其他任何内容吗? 谢谢你的时间。

1Edit:

我也尝试了这些PARAMS:_bulk action.write_consistency =一个&刷新,但没有什么区别为止。

2Edit:

这里是什么让我的批量加载工作 - 建立一致性参数(我并不需要设置refresh_interval):

  URIBuilder uriBuilder = new URIBuilder(myuri); 
      uriBuilder = uriBuilder.addParameter("consistency", "one");     
      HttpPost post = new HttpPost(uriBuilder.build()); 
      HttpEntity entity = new InputStreamEntity(myInputStream); 
      post.setEntity(entity); 

从我的经验,可能会出现问题,当你的索引您的群集无法满足复制设置。这发生在网络分区期间,或者您只需设置物理集群无法满足的复制要求。

在我的情况下,当我将我的生产设置(number_of_replicas:3)应用到我的开发集群(这是单节点集群)时,会发生这种情况。

您的两个解决方案(将副本设置为1或将您的一致性设置为1)可以解决此问题,因为它们允许Elastic继续批量索引而不等待其他副本进入联机状态。

弹性搜寻可能会对失败更直观的消息,也许他们在弹性5

做你的集群设置为单