随着对应用程序的域模型对象进行更改,希望让人们了解如何使Lucene索引保持最新状态。
有问题的应用程序是一个使用Hibernate的基于Java / J2EE的Web应用程序。我目前的工作方式是Hibernate映射模型对象都实现了一个通用的“Indexable”接口,它可以返回一组记录在Lucene中的键/值对。每当执行涉及此类对象的CRUD操作时,我都会通过JMS队列将其发送到消息驱动的bean中,该bean在Lucene中记录对象的主键以及从Indexable对象的index()方法返回的键/值对。提供。
我对此方案的主要担忧是,如果MDB落后并且无法跟上正在进行的索引操作,或者某种错误/异常会阻止对象成为索引。结果是排序或长时间段的过期索引。
基本上我只是想知道其他人为这类事情提出了什么样的策略。不一定要寻找一个正确的答案,但我想象一个“白板”的想法列表,让我的大脑思考替代品。
答案 0 :(得分:4)
更改消息:只提供主键和当前日期,而不是键/值对。您的mdb通过主键获取实体并调用index()。建立索引后,将索引中的值“已更新”设置为消息日期。仅当消息日期位于索引的“已更新”字段之后时,才更新索引。这样你就无法落后,因为你总是首先获取当前的键/值对。
作为替代方案:看看http://www.compass-project.org。
答案 1 :(得分:0)
接受的答案现在是8岁,已经过时了。
Compass项目已经很久没有了,因为它的主要开发人员继续创建优秀的Elasticsearch。
对此的现代回答是使用Hibernate Search,它可以直接映射到Lucene索引或直接映射到Elasticsearch。