【发布时间】:2021-07-02 13:00:59
【问题描述】:
我正在开发用于搜索目的的 Spring 应用程序。我使用 elasticsearch spring 数据库来创建索引和管理文档。对于查询(搜索),我使用了来自 elasticsearch 的常规客户端 - 而不是来自 spring 数据。
我注意到弹簧数据只有在弹性搜索中丢失时才会创建索引。每当将新字段添加到使用 @Document 注释的类时,映射都不会更新。因此,在刚刚添加的字段中搜索会导致错误的请求。
该应用程序现已在生产中运行。此应用程序有多个实例正在运行。我想更改索引的映射并保留现有数据。
我在互联网和文档中找到的解决方案是使用重新索引功能创建新索引、复制数据(并可能即时更改它们)并将别名切换为新的。
我用这种方法实现了解决方案。迁移过程在应用程序启动时运行(如果需要 - 由 env 参数决定)。 但是,在我看来,这种方法既便宜又伪劣。使用无痛脚本更改文档很容易出错。很难测试迁移。我需要手动保存有关我正在运行迁移的环境的信息,并设置正确的索引名称。在部署期间,我需要密切关注流程以检查一切是否正常。可能还需要进行一些手动更改。如果在此期间重新索引过程失败怎么办?
有很多问题困扰着我。我在寻找为什么没有图书馆,类似于 Flyway。另外,我知道无法更改索引的映射,但可以添加新字段,并且 spring 数据弹性搜索不支持。
请大家给我一些建议,你如何处理这种情况?
【问题讨论】:
标签: spring elasticsearch spring-data-elasticsearch