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

sea*_*ain 6 elasticsearch

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

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

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

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

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

我会

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

那么我可以对上面的设置做哪些改变来提高索引速度和性能,并减少过程中像Elasticsearch连接错误这样的错误?

我正在使用 AWS 托管的 Elasticsearch。

我还能做什么?

谢谢!

xra*_*age 5

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

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

2 - 保持最佳批量大小,同时进行批量索引。

3 - 正确设置堆大小,例如对于 64Gb 节点,31Gb 应该是最佳堆。有关详细信息 - 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 - 禁用复制(您可以在大索引后启用它)