【问题标题】:Is there any limit to the size of PUT/POST data while indexing documents in Elastic Search via Http call?通过 Http 调用在 Elastic Search 中索引文档时,PUT/POST 数据的大小是否有任何限制?
【发布时间】:2019-02-01 20:08:51
【问题描述】:

我正在使用 Elastic Search 5.0.1 创建一个重度更新搜索应用程序,其中数十万条记录被索引到弹性搜索中。对于来自我的 Java 客户端使用 HttpURLConnection 的多个索引,这种情况每隔几秒就会发生一次。我正在使用elastic search's Bulk API,为此我创建了一个包含行分隔的JSON字符串的单个PUT实体,如下所示(如Bulk API docs所示):

action_and_meta_data\n
optional_source\n
action_and_meta_data\n
optional_source\n
....
action_and_meta_data\n
optional_source\n

但是,当文档数量超过一定限制时,我得到以下异常:

java.io.IOException: Error writing to server
    at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:582)
    at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:594)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1216)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)

我可以检查here,理论上对 PUT 数据大小没有限制,只有客户端和服务器施加的限制。

Elastic Search 服务是否施加任何此类限制?如果是,这些限制是什么以及如何更好地处理这种情况(修改服务器限制或批处理查询)?

【问题讨论】:

    标签: java elasticsearch http-post httpurlconnection elasticsearch-5


    【解决方案1】:

    正如official guide 所指出的,没有硬性限制,应该尝试直到找到“正确”的限制。

    从这个链接你可以看到:

    尝试以越来越大的批量索引典型文档。当性能开始下降时,你的批量太大了。一个好的起点是批量处理 1,000 到 5,000 个文档,或者,如果您的文档非常大,可以使用更小的批量。

    但请注意:

    一千个 1KB 的文档与一千个 1MB 的文档有很大的不同。开始使用的合适的大容量大小约为 5-15MB。

    这里你可以找到official tips批量请求的性能优化

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多