是的,Elasticsearch的数据更新和删除需要重新索引,这是因为在Elasticsearch中,索引是不可变的。当文档被索引时,它们会被分配到特定的分片中,并且该分片会被分配一组不可变的Lucene索引段,这些索引段是用于搜索和聚合。
当我们对文档进行更新或删除操作时,Elasticsearch会标记该文档已经过期,但它并不会立即从索引中删除。相反,当合适的时机到来时(例如,当达到合并策略的阈值),Elasticsearch将删除已标记为已过期的文档,并重新构建相关索引以保持其不可变性。
因此,更新和删除操作实际上会导致索引被重新构建,这也是为什么在Elasticsearch中,写入操作可能比读取操作更费时的原因之一。
需要注意的是,在使用Elasticsearch时,优化索引的过程通常是非常重要的,因为它可以提高搜索性能和减少资源消耗。为此,建议定期运行优化操作以确保索引的健康状态。