簡體   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