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

时间:2018-10-11 03:09:58

标签: elasticsearch

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

运行正常。搜索简单快捷。

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

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

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

我会

  • 在一个集群中使用3个节点(我找不到集群中节点数量的好答案,因此,正如某些文章所建议的那样,三个节点似乎是一个很好的数字)
  • 我将为每个索引使用5个碎片1个副本。 (我也没有找到合适的电话号码,这是现在的默认电话号码)
  • 现在,我在一个群集上有5-10个索引,群集大小为1000 GB(已使用300 GB)。如果我在一个索引上运行一个群集(群集大小为200 GB),而不是在1000 GB群集上运行10个索引,那么在索引和搜索方面的性能会更好吗?
  • 我添加到索引中的文档是计划的汇总数据。该文档的字段号从6到12等。我将大多数fields关键字设置为数据类型,如果我创建的字段较少,例如仅使用一半的fields关键字,则可以提高索引文档速度的多少? (在我的情况下,索引大小达到100 GB,每天我对索引进行批处理/向索引添加100万个文档。

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

我正在使用AWS托管的Elasticsearch。

我还能做什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

在为文档建立索引时,您的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-禁用复制(可以在建立大索引后启用它)