首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Hibernate搜索6-如何防止对特定实体的自动索引?

使用Hibernate搜索6-如何防止对特定实体的自动索引?
EN

Stack Overflow用户
提问于 2022-10-11 23:41:45
回答 1查看 39关注 0票数 0

我们希望为我们的Hibernate搜索实体处理索引。

是否可以在Hibernate搜索6中禁用特定实体的自动索引?类似于旧的Hibernate搜索全局设置: hibernate.search.indexing_strategy =手动

我已经搜索过这些文档,但没有看到提到过的内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 07:23:58

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();};

我没有准确地测试这个,所以请报告,但原则上这应该是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74035068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档