hibernate.search.indexing_strategy = manual适用于所有实体类型,而不是特定的实体类型。
您要寻找的功能已经作为HSEARCH 168提交,目前计划用于Hibernate搜索6.2。
在此期间,我认为你能做的最好的就是依靠黑客。它不会像我们为HSEARCH 168设想的那样高效,但这是一个开始:
- 实现一个基于开关的RoutingBridge,它将完全禁用索引(从索引中添加和删除实体),或者行为正常,好像没有路由桥一样:公共类ManualIndexingRoutingBinder实现了RoutingBinder {私有静态易失性布尔值indexingEnabled = false;公共静态同步虚空withIndexingEnabled(Runnable runnable) { indexingEnabled = true;最后尝试{ runnable.run();}{ indexingEnabled = false;}}@重写公共无效绑定(RoutingBindingContext上下文){ context.dependencies() .useRootOnly();context.bridge( Book.class,新桥() );}公共静态类桥实现RoutingBridge {@覆盖公共空路由(DocumentRoutes路由、对象entityIdentifier、Bridge、RoutingBridgeRouteContext上下文){ if ( indexingEnabled ){ routes.addRoute();} indexedEntity { routes.notIndexed();}@覆盖公共空previousRoutes(DocumentRoutes路由、对象entityIdentifier、图书indexedEntity、RoutingBridgeRouteContext上下文){ if ( indexingEnabled ){ //以便Hibernate搜索将在必要时正确删除实体。//仅当您使用SearchIndexingPlan进行手动索引时才有用,//因为MassIndexer从不删除文档。routes.addRoute();} routes.notIndexed();}
- 将路由桥应用于要控制的实体类型:@Entity @Indexed(routingBinder = @RoutingBinderRef(type = ManualIndexingRoutingBinder.class))公共类Book { // .}
- 路由桥将有效地禁用自动索引。
- 要手动索引,请执行以下操作: ManualIndexingRoutingBinder.withIndexingEnabled(() -> { Search.mapping(entityManagerFactory).scope(Book.class) .massIndexer() .startAndWait();};
我没有准确地测试这个,所以请报告,但原则上这应该是可行的。