我在Elastic中有每天生成的产品数据(>10.000.000)的索引,但我也需要在白天不断更新这些数据。我需要更新的东西是例如价格,可用性或产品的分类属性。
我想知道什么是处理这种情况的最佳方法?
1.我可以将更改的属性发送到索引,但我已经了解到这是一项代价高昂的任务,因此当它不断发生时,它会降低搜索性能。
1.在关系数据库中,我们只更新包含该数据的特定表。但在ES中不存在。
1.我们可以将索引拆分为单独的索引,这样不是所有的更改都在一个索引上完成,这样可以更好地提高性能。但是我想,当我们过滤一个索引并需要将其与另一个索引的结果合并组合时,搜索将变得更加困难。我认为在这种情况下,我们总是需要从单个索引中获取更大的结果,而不是只从单个索引中获取15个结果,以便能够获得两个索引的最佳组合?
还有其他的想法,最好的建议或想法吗?
1条答案
按热度按时间7lrncoxx1#
当您更新单个字段时,elasticsearch必须重新索引整个记录,这确实会导致显着的索引负载。但是,由于每天只有1000万次更新,因此您可以简单地更新整个记录。我建议在跳到更复杂的解决方案之前先测试它。
如果您的记录很大,并且您的服务器无法跟上更新,您可能希望尝试将记录分为两部分-静态部分和动态部分。然后将这两个部分作为不同的记录进行索引,静态部分扮演父记录的角色,动态部分扮演join field中的子记录的角色。这样的设置会对搜索性能产生负面影响,但它应该会加快索引性能。