Elasticsearch 文档的最大大小是多少?
What is the maximum Elasticsearch document size?
我阅读了有关 Lucene 被限制为 2Gb 文档的说明。对于可以在 Elasticsearch 中编制索引的文档的大小是否有任何其他限制?
Lucene 在内部使用一个字节缓冲区,该缓冲区使用 32 位整数进行寻址。根据定义,这限制了文档的大小。所以2GB理论上是最大的。
在 ElasticSearch 中:
ESGitHub代码中有一个max http request size
,是针对Integer.MAX_VALUE
或2^31-1
设置的。因此,基本上,2GB 是通过 HTTP 进行批量索引的最大文档大小。此外,ES 在完成之前不会处理 HTTP 请求。
良好做法:
- 如果可以,请不要使用非常大的 java 堆:将其设置为必要的大小(最好不超过机器 RAM 的一半)以容纳最大工作集大小了解您对 Elasticsearch 的使用。这为 OS 留下了剩余的(希望相当大的)RAM 来管理 IO 缓存。
- 在客户端,始终使用批量 api,它在一个请求中索引多个文档,并尝试在每个批量请求中发送正确数量的文档。最佳大小取决于许多因素,但尽量在文件太少而不是太多的方向上犯错误。使用客户端线程的并发批量请求或单独的异步请求。
如需进一步研究,请参阅以下链接:
认为 Elasticsearch 这些年来情况略有变化。在此处引用的 7.x 文档中 - General Recommendations:
Given that the default http.max_content_length is set to 100MB, Elasticsearch will refuse to index any document that is larger than that. You might decide to increase that particular setting, but Lucene still has a limit of about 2GB.
所以看起来 ES 的限制是 ~100MB,而 Lucene 的限制是 2GB,正如其他答案所述。
我阅读了有关 Lucene 被限制为 2Gb 文档的说明。对于可以在 Elasticsearch 中编制索引的文档的大小是否有任何其他限制?
Lucene 在内部使用一个字节缓冲区,该缓冲区使用 32 位整数进行寻址。根据定义,这限制了文档的大小。所以2GB理论上是最大的。
在 ElasticSearch 中:
ESGitHub代码中有一个max http request size
,是针对Integer.MAX_VALUE
或2^31-1
设置的。因此,基本上,2GB 是通过 HTTP 进行批量索引的最大文档大小。此外,ES 在完成之前不会处理 HTTP 请求。
良好做法:
- 如果可以,请不要使用非常大的 java 堆:将其设置为必要的大小(最好不超过机器 RAM 的一半)以容纳最大工作集大小了解您对 Elasticsearch 的使用。这为 OS 留下了剩余的(希望相当大的)RAM 来管理 IO 缓存。
- 在客户端,始终使用批量 api,它在一个请求中索引多个文档,并尝试在每个批量请求中发送正确数量的文档。最佳大小取决于许多因素,但尽量在文件太少而不是太多的方向上犯错误。使用客户端线程的并发批量请求或单独的异步请求。
如需进一步研究,请参阅以下链接:
认为 Elasticsearch 这些年来情况略有变化。在此处引用的 7.x 文档中 - General Recommendations:
Given that the default http.max_content_length is set to 100MB, Elasticsearch will refuse to index any document that is larger than that. You might decide to increase that particular setting, but Lucene still has a limit of about 2GB.
所以看起来 ES 的限制是 ~100MB,而 Lucene 的限制是 2GB,正如其他答案所述。