HibernateSearch 更新架构,删除并重新创建索引 Spring 在 Kubernetes 集群上启动
HibernateSearch Update Schema, drop and recreate index with Spring boot on Kubernetes cluster
我有一个 spring boot
应用程序与 Hibernate Search 6.0.2.Final
和 Elasticsearch
集成。
当我的应用程序第一次启动时,我必须在 ElasticSearch
中创建索引。由于我的应用程序将 运行 在多个 pods 上,我相信我不能使用 MassIndexer
,因为它会在应用程序启动期间在每个节点上 运行。
其次,在 Elasticsearch
中创建架构和索引后,假设我向 Entity
class 添加另一个字段,那么我将不得不 update the schema
,以及 drop-recreate
索引。
看起来 schema management
和 drop-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 端点。
使用这样的按钮或端点,您可以:
- 启动您的应用程序节点。
- 然后按管理控制台上的按钮触发架构更新和批量索引,这只会在一个节点上发生。
或者,如果出于某种原因您不想通过您的应用程序公开大量索引,您可以使用 CommandLineRunner
或 ApplicationRunner
,它们仅在您启动应用程序时执行某些操作一个特定的参数(例如 mass-index
)。这样你就可以在某个地方启动你的应用程序,并使用触发大量索引的参数,等待大量索引结束,停止应用程序,然后才进行实际部署。不过我不是 Spring 专家,所以我会让您在网上搜索如何使用 CommandLineRunner
/ApplicationRunner
。
我有一个 spring boot
应用程序与 Hibernate Search 6.0.2.Final
和 Elasticsearch
集成。
当我的应用程序第一次启动时,我必须在 ElasticSearch
中创建索引。由于我的应用程序将 运行 在多个 pods 上,我相信我不能使用 MassIndexer
,因为它会在应用程序启动期间在每个节点上 运行。
其次,在 Elasticsearch
中创建架构和索引后,假设我向 Entity
class 添加另一个字段,那么我将不得不 update the schema
,以及 drop-recreate
索引。
看起来 schema management
和 drop-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 端点。
使用这样的按钮或端点,您可以:
- 启动您的应用程序节点。
- 然后按管理控制台上的按钮触发架构更新和批量索引,这只会在一个节点上发生。
或者,如果出于某种原因您不想通过您的应用程序公开大量索引,您可以使用 CommandLineRunner
或 ApplicationRunner
,它们仅在您启动应用程序时执行某些操作一个特定的参数(例如 mass-index
)。这样你就可以在某个地方启动你的应用程序,并使用触发大量索引的参数,等待大量索引结束,停止应用程序,然后才进行实际部署。不过我不是 Spring 专家,所以我会让您在网上搜索如何使用 CommandLineRunner
/ApplicationRunner
。