【问题标题】:Optimizing Elastic Search Index for many updates on few fields针对少数字段的许多更新优化弹性搜索索引
【发布时间】:2022-02-03 06:06:46
【问题描述】:

我们正在开发一个大型 Elasticsearch 索引(>1 个双向文档),其中许多可搜索字段均匀分布在 6 个节点上的 >100 个分片中。

这些字段中只有少数是实际更改的,但更改非常频繁。大约 25% 的总请求是对这些字段的更改。

我们有一个字段只包含一个布尔值,占对文档所做更改的 90% 以上。

看起来我们在重新索引整个文档时受到了巨大的性能影响,即使一个简单的布尔值正在改变。

阅读后我发现这可能是一种可以将布尔值存储在父子字段中的情况,因为这将有效地将其放置在单独的索引中,因此不会强制重新创建整个文档。但我也读到这有一些缺点,例如关系使用更多的堆空间。

解决这一挑战的最佳方法是什么?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    是的,因为 Elasticsearch 在内部是一个只写系统,每次更新都会有效地创建一个新文档,并将旧副本标记为过时,以便以后进行垃圾收集。

    父子字段(又名join)或nested 字段可以帮助解决这个问题,但它们本身会对性能造成重大影响,因此您的搜索性能可能会受到影响。

    另一种方法是使用 Redis 之类的外部快速存储(如 this article 中所述),尽管它更难维护,并且可能会导致搜索效率低下,具体取决于您的用例。

    这里的一般经验法则是:所有用例都不同,您应该仔细地对所有可行选项进行基准测试。

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多