0

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

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

其次,在创建架构和索引之后Elasticsearch,假设我在Entity类中添加另一个字段,那么我将不得不添加update the schemadrop-recreate索引。

看起来schema managementand drop-recreateof 索引应该在 Spring Boot 应用程序之外完成。我怎样才能做到这一点Hibernate Search Schema and Index management

4

1 回答 1

2

架构更新和海量索引确实应该从单个节点发生。

首先,您需要在启动时禁用自动模式管理

hibernate.search.schema_management.strategy = none

然后,您需要在应用程序中提供一个管理界面(只有维护人员可以访问),并带有一个可以触发模式更新海量索引的按钮。或者,如果您希望通过脚本执行此操作,这可以是一个简单的经过身份验证的 REST 端点。

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

  • 启动您的应用程序节点。
  • 然后按下管理控制台上的按钮以触发模式更新和海量索引,这将仅在一个节点上发生。

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

于 2021-03-31T07:34:56.213 回答