amazon-elasticsearch,Java,Amazon Web Services,amazon Elasticsearch" /> amazon-elasticsearch,Java,Amazon Web Services,amazon Elasticsearch" />

AWS ElasticSearch 2.3 Java HTTP批量API

AWS ElasticSearch 2.3 Java HTTP批量API,java,amazon-web-services,amazon-elasticsearch,Java,Amazon Web Services,amazon Elasticsearch,我想在AWS ElasticSearch 2.3上使用Java中的批量HTTP api。 当我使用rest客户机进行批量加载时,会出现以下错误: 504 GATEWAY_TIMEOUT 当我在Java中以Lambda的形式运行它时,对于HTTP POST,我得到: { "errorMessage": "2017-01-09T19:05:32.925Z 8e8164a7-d69e-11e6-8954-f3ac8e70b5be Task timed out aft

我想在AWS ElasticSearch 2.3上使用Java中的批量HTTP api。 当我使用rest客户机进行批量加载时,会出现以下错误:

504 GATEWAY_TIMEOUT
当我在Java中以Lambda的形式运行它时,对于HTTP POST,我得到:

{
  "errorMessage": "2017-01-09T19:05:32.925Z 8e8164a7-d69e-11e6-8954-f3ac8e70b5be Task timed out after 15.00 seconds"
}
通过测试,我注意到批量API在以下设置下不起作用:

    "number_of_shards" : 5,
    "number_of_replicas" : 5
当碎片和副本设置为1时,我可以进行批量加载,没有问题。 我已尝试使用此设置来允许批量加载:

    "refresh_interval" : -1
但到目前为止,它没有产生任何影响。在JavaLambda中,我从S3位置以InputStream的形式加载数据。 在这一点上,我对Java HTTP有哪些选择? 索引设置中还有什么我可以尝试的吗? AWS访问策略中还有什么我可以尝试的吗? 谢谢你抽出时间

1编辑: 我还尝试了以下参数:_bulk?action.write_consistency=one&refresh,但到目前为止没有任何区别

2编辑: 以下是使我的批量加载工作的原因-设置一致性参数(我不需要设置刷新间隔):


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

在我的例子中,当我将生产设置(副本的数量:3)应用到我的开发集群(即单节点集群)时,就会发生这种情况

您的两个解决方案(将副本设置为1或将一致性设置为1)解决了此问题,因为它们允许弹性继续执行批量索引,而不等待其他副本联机

弹性搜索可能会有一个更直观的失败信息,也许他们在弹性5


根据我的经验,将群集设置为单个

,当群集无法满足索引复制设置时,可能会出现此问题。这可能发生在网络分区期间,或者如果您只是设置了物理集群无法满足的复制要求

在我的例子中,当我将生产设置(副本的数量:3)应用到我的开发集群(即单节点集群)时,就会发生这种情况

您的两个解决方案(将副本设置为1或将一致性设置为1)解决了此问题,因为它们允许弹性继续执行批量索引,而不等待其他副本联机

弹性搜索可能会有一个更直观的失败信息,也许他们在弹性5

将群集设置为单个

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