当应用程序的域模型对象发生更改时,我们希望了解人们对保持 Lucene 索引最新的想法。

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

我对此方案的主要担心是 MDB 是否落后并且无法跟上即将到来的索引操作,或者某种错误/异常是否阻止对象被索引。结果是在一段时间内或很长一段时间内索引都已过时。

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

有帮助吗?

解决方案

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

作为备选:看一下 http://www.compass-project.org.

其他提示

接受的答案已经有 8 年历史了,而且已经过时了。

Compass 项目很长一段时间以来都不再维护了,因为它的主要开发人员开始创建优秀的 Elasticsearch。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top