如何调整 Elasticsearch 以使其快速索引?



我的ElasticSearch不会做一些复杂的查询。我使用 ElasticSearch 只是为了在大型数据集上快速搜索性能。

它运行良好。搜索简单快捷。

但是随着索引中的文档变得庞大,添加新文档变得越来越慢。

  • 当索引的大小较小时,添加/索引 100 万个文档大约需要 250 秒。
  • 但是,当同一索引的大小达到大约 50 GB 时,添加 100 万个文档大约需要 1000 秒。
  • 当同一索引的大小达到 100 GB 时,添加 100 万个文档将花费更长的时间。
  • 有时在索引 100 万个文档的过程中,我可以看到弹性搜索连接错误,错误来自代码行附近的代码。"//<2.0 "我刚刚炸毁了"非结构化异常"。而且,当我尝试将 100 万个文档索引到一个大型索引(约 100 GB(时,我才会看到此错误。当索引大小较小时,我在日志中没有看到此错误。

我想调整 ElasticSearch 集群,使其仍然快速返回搜索结果,但我也希望它能够快速索引/添加文档,即使索引达到 100 GB 或更大的大小。

我会

  • 在一个集群中使用 3 个节点(我没有找到集群中节点数量的好答案,所以正如一些文章所建议的那样,三个似乎是一个不错的数字(
  • 我会为每个索引使用 5 个分片 1 个副本。(我也没找到好数字,这是现在的默认数字(
  • 现在,我在一个集群上有 5 - 10 个索引,集群大小为 1000 GB(使用 300 GB(。如果我在一个集群(集群大小为 200 GB(上运行一个索引,而不是在 1000 GB 集群上运行 10 个索引,这在索引和搜索方面的性能会更好吗?
  • 我添加到索引的文档是汇总的投影数据。 文档的字段编号从 6 到 12 等。我做了大部分字段关键字数据类型,如果我做的字段更少,比如只有一半的字段关键字,我可以提高多少索引文档的速度?(就我而言,索引大小达到 100 GB,每天我都会批量索引/向索引添加 100 万个文档。

那么我可以对上述设置进行哪些更改以提高索引速度和性能,并减少过程中的 Elasticsearch 连接错误等错误?

我正在使用 AWS 托管的 Elasticsearch。

我还能做什么?

谢谢!

当您为文档编制索引时,您的 es 集群也会尝试将该数据同步到其他节点。为了获得更好的索引性能,可以进行一些改进。

1 - 在索引时设置较大的refresh_interval。这将延迟节点之间的数据同步,并使索引速度更快。

2 - 在批量索引时保持最佳批量大小。

3 - 正确设置堆大小,例如,对于 64Gb 节点,31 Gb 应该是最佳堆。有关详细信息 - https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html

4 - 增加文件描述符和 MMap - https://www.elastic.co/guide/en/elasticsearch/guide/current/_file_descriptors_and_mmap.html

5 - 如果在引入时转换数据,则可以使用专用引入节点 - https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html

6 - 禁用复制(您可以在大型索引后启用它(

最新更新