2008-09-01 49 views
6

正在尋求讓人們考慮如何對應用程序的領域模型對象進行更改以使Lucene索引保持最新。通過領域模型更改保持Lucene索引的最新策略

有問題的應用程序是使用Hibernate的基於Java/J2EE的Web應用程序。我目前的工作方式是Hibernate映射模型對象都實現了一個公共的「可索引」接口,該接口可以返回一組記錄在Lucene中的鍵/值對。每當涉及這樣一個對象的CRUD操作被執行時,我通過JMS隊列將它發送到一個消息驅動的bean中,該消息驅動的bean在Lucene中記錄對象的主鍵和從Indexable對象的index()方法返回的鍵/值對,提供。

我對這種方案的主要擔心是,如果MDB落後,無法跟上即將到來的索引操作,或者某種錯誤/異常會阻止對象成爲索引。結果是一個過時的索引或者一段很長的時間。

基本上我只是想知道別的什麼樣的策略提出這種事情。不一定要尋找一個正確的答案,但想象的是一系列「白板」的想法,讓我的大腦思考替代方案。

回答

4

更改消息:只提供主鍵和當前日期,而不是鍵/值對。您的mdb通過主鍵提取實體並調用index()。建立索引後,您將索引中的值更新爲消息日期。只有在消息日期位於索引的「更新」字段之後,才能更新索引。這樣你就不能後退,因爲你總是先獲取當前的鍵/值對。

作爲替代方案:看看http://www.compass-project.org

0

接受的答案是現在8歲,非常過時。

自從很久以後,Compass Project就不再被維護,因爲它的主要開發人員繼續創建了優秀的Elasticsearch。

對此的現代答案是使用Hibernate Search,偶爾可以直接映射到Lucene索引或通過Elasticsearch映射到Lucene索引。