HibernateSearch 更新架构,删除并重新创建索引 Spring 在 Kubernetes 集群上启动

HibernateSearch Update Schema, drop and recreate index with Spring boot on Kubernetes cluster

我有一个 spring boot 应用程序与 Hibernate Search 6.0.2.FinalElasticsearch 集成。

当我的应用程序第一次启动时,我必须在 ElasticSearch 中创建索引。由于我的应用程序将 运行 在多个 pods 上,我相信我不能使用 MassIndexer,因为它会在应用程序启动期间在每个节点上 运行。

其次,在 Elasticsearch 中创建架构和索引后,假设我向 Entity class 添加另一个字段,那么我将不得不 update the schema,以及 drop-recreate 索引。

看起来 schema managementdrop-recreate 索引应该在 spring 引导应用程序之外完成。如何使用 Hibernate Search Schema and Index management?

实现此目的

模式更新和大量索引确实应该从单个节点发生。

首先,您需要禁用automatic schema management on startup:

hibernate.search.schema_management.strategy = none

然后,您的应用程序中需要一个管理界面(只有维护人员才能访问),以及一个会触发 schema updates and mass indexing 的按钮。或者,如果您更愿意通过脚本执行此操作,这可以是一个简单的经过身份验证的 REST 端点。

使用这样的按钮或端点,您可以:

  • 启动您的应用程序节点。
  • 然后按管理控制台上的按钮触发架构更新和批量索引,这只会在一个节点上发生。

或者,如果出于某种原因您不想通过您的应用程序公开大量索引,您可以使用 CommandLineRunnerApplicationRunner,它们仅在您启动应用程序时执行某些操作一个特定的参数(例如 mass-index)。这样你就可以在某个地方启动你的应用程序,并使用触发大量索引的参数,等待大量索引结束,停止应用程序,然后才进行实际部署。不过我不是 Spring 专家,所以我会让您在网上搜索如何使用 CommandLineRunner/ApplicationRunner