繁体   English   中英

是否可以进行hibernate搜索远程索引?

[英]Is hibernate search remote indexing possible?

我们将几年前最初在Oracle Forms中开发的应用程序迁移到使用Hibernate(4.2.7.Final)和Hibernate Search(4.1.1.Final)的基于Java(7)Web的应用程序。

其中一个要求是:当用户使用新迁移的版本时,他们可以使用Oracle Forms版本 - 因此Hibernate Search索引将不同步。 实现servlet是否可行,以便某些PL-SQL访问某些链接以更新应用程序服务器(AS)中的本地索引?

我想过为hibernate实现一种排序集群机制,但是当我阅读文档时,我意识到由于集群可能是scalabillity和性能的一个很好的选择,因此保持遗留数据同步可能有点过分。

有没有人知道如何实现一个服务,可以通过servlet访问,以更新给定模型实体中具有给定ID的本地AS索引?

我不知道聚类部分究竟是什么意思,但无论如何:

看起来你正面临着像我这样的类似问题。 我目前正在为JPA提供程序(不是Hibernate-ORM,即EclipseLink,TopLink等)创建Hibernate-Search适配,我正在研究自动重建索引功能。 由于JPA没有适合使用Hibernate-Search重新索引的事件系统,我提出了在数据库级别使用触发器来跟踪所有内容的想法。

对于一个基本的OneToOne关系,它非常简单,对于其他事情,如关系表或任何未存储在实体主表中的东西,它会变得有点棘手,但是一旦你有一个OneToOne关系系统,它就不那么难了进入下一步。 好的,我们开始吧:

想象一下两个实体: 地方巫师在环宇宙之王中。 为了简单起见,我们只是说它们处于(相当严格的:D)1:1的关系中。 通常你最终得到2个名为SORCERER和PLACE的表。

现在,您必须在每个表(SORCERER和PLACE)上创建3个触发器(一个用于CREATE,一个用于DELETE,一个用于UPDATE),这些触发器存储有关哪个实体(仅用于映射表的ID始终存在多个ID)的信息已更改以及如何(CREATE,UPDATE,DELETE)进入特殊的UPDATE表。 我们称之为PLACE_UPDATES和SORCERER_UPDATES。

除了已更改的原始Object的ID和事件类型之外,还需要在所有UPDATE表中需要为UNIQUE的ID字段。 这是必需的,因为如果您想要将更新表中的信息提供给Hibernate-Search索引,您必须确保事件的顺序正确,否则您将破坏索引。 如何在数据库上创建这样的UNIQUE ID应该很容易在internet / stackoverflow上找到。

好的。 现在您已经正确设置了触发器,您只需找到一种方法以可行的方式访问所有UPDATES表(我这样做是通过一次查询多个表并按我们的UNIQUE id字段对每个查询进行排序然后只是比较每个查询的第一个结果与其他查询,然后更新我的索引。

这可能有点棘手,您必须找到处理特定更新事件的正确方法,但它可以完成(这就是我目前正在处理的事情)。

如果您对该部分感兴趣,可以在此处找到:

https://github.com/Hotware/Hibernate-Search-JPA/blob/master/hibernate-search-db/src/main/java/com/github/hotware/hsearch/db/events/IndexUpdater.java

整个项目的链接是:

https://github.com/Hotware/Hibernate-Search-JPA/

这使用Hibernate-Search 5.0.0。

我希望这是有帮助的(至少一点点)。

关于你的远程索引问题:

更新表可以轻松地用作某种事件转储,直到将它们发送到要更新的远程计算机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM