6

随着对应用程序的域模型对象的更改,希望让人们对保持 Lucene 索引保持最新的想法。

有问题的应用程序是一个使用 Hibernate 的基于 Java/J2EE 的 Web 应用程序。我目前的工作方式是 Hibernate 映射模型对象都实现了一个通用的“可索引”接口,该接口可以返回一组记录在 Lucene 中的键/值对。每当执行涉及此类对象的 CRUD 操作时,我通过 JMS 队列将其发送到消息驱动的 bean 中,该 bean 在 Lucene 中记录对象的主键和从 Indexable 对象的 index() 方法返回的键/值对假如。

我对这个方案的主要担心是 MDB 是否落后并且无法跟上即将到来的索引操作,或者如果某种错误/异常阻止对象成为索引。结果是某个时间段或较长时间段的过期索引。

基本上我只是想知道其他人为这种事情想出了什么样的策略。不一定要寻找一个正确的答案,但我正在想象一系列“白板”之类的想法,让我的大脑思考替代方案。

4

2 回答 2

4

更改消息:只提供主键和当前日期,而不是键/值对。您的 mdb 通过主键获取实体并调用 index()。索引后,您将索引中的值“更新”设置为消息日期。仅当消息日期在索引的“更新”字段之后时,您才更新索引。这样你就不会落后,因为你总是先获取当前的键/值对。

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

于 2008-09-01T17:26:13.630 回答
0

接受的答案现在已经 8 岁了,而且已经过时了。

Compass 项目已经很久没有维护了,因为它的主要开发人员继续创建出色的 Elasticsearch。

对此的现代答案是使用Hibernate Search,顺便说一下,它可以直接映射到 Lucene 索引,也可以通过 Elasticsearch 映射。

于 2017-03-09T12:51:18.183 回答