如何优化弹性搜索的索引?

时间:2015-04-27 12:51:19

标签: indexing elasticsearch lucene

我试图了解如何在elasticsearch上优化索引。让我澄清一下我的需求;

  • 我现在有两个索引。可以说,indexAindexB(可以看到两个指数大致相同)
  • 我有6台专用于elasticsearch的机器(我们可以说完全相同的硬件)
  • 我的弹性搜索使用中最重要的部分是写作,因为我正在进行大量的实时写作。

所以我的问题是,如何使用这6台机器优化写入操作?

  • 我是否应该将机器分为两部分,例如indexA的3台机器和indexB的3台机器?

  • 我应该使用全部6台机器来索引indexAindexB吗?

  • 为了优化写入操作,我还需要注意什么?

提前谢谢

1 个答案:

答案 0 :(得分:1)

这取决于,但是让我按照您的问题陈述指明方向,导致以下假设:

  • 你想做更多的写操作(不担心搜索性能)
  • 两个索引都在同一个群集中
  • 将来可以添加更多系统

为了获得更好的索引性能,首先您可能希望索引具有单个分片(除非您使用路由)。但是,由于您有6个具有单个分片的服务器将浪费资源,因此您可以为indexA和indexB中的每一个分配3个分片。这适用于当前场景,但建议使用~10个分片(以便将来可扩展,并且依赖于数据大小)

关闭副本(如果可能,索引请求在返回之前等待副本响应)。虽然在生产环境中,强烈建议至少拥有一个副本以实现高可用性。

将刷新率设置为“-1”或至少设置为更大的数字,例如“30m”。 (如果您这样做,您将失去NRT搜索,但正如您所提到的,您将关注索引)

转过index warmers,如果有的话。

避免使用“doc_values”进行字段映射。 (虽然它有利于在搜索时减少内存占用,但它会增加索引时间,因为它在索引期间准备字段值)

如果可能/不需要在地图中禁用“规范”

最后阅读this

提醒:上述某些方法会影响您的搜索效果。