【发布时间】:2012-05-11 09:11:55
【问题描述】:
技术版本:
休眠搜索 3.4.0
Lucene (lucene-core-*.jar) 3.1.0
弹簧 3.1.0.M2
休眠(搜索)配置:
<prop key="hibernate.search.default.indexBase">/some/dir</prop>
<prop key="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider</prop>
<prop key="hibernate.search.default.locking_strategy">native</prop>
<prop key="hibernate.search.default.exclusive_index_use">false</prop>
问题:
我们的应用程序部署在 Amazon(AWS 云)中,但我们在本地集群中也遇到了这个问题:
应用程序设计是这样的,有一个Thread,它是从主(Web)应用程序中产生的,我们需要从中更新一个索引实体。基本上它就像一个状态监视器线程,它读取一个 .status 文件并每 30 秒左右更新一次数据库。这种情况平均持续大约 10 分钟到 1/2 小时。
我们看到的问题是:每隔几天我们就需要重新生成索引,因为 Hibernate Search 停止为有问题的实体返回任何内容(上面讨论的那个)。
我浏览了几个论坛,似乎建议只有一个线程应该更新 Lucene 索引。但也考虑到索引写入是线程安全的。因此,即使多个线程正在写入同一个索引,我仍然希望它不会导致问题(搜索中没有返回任何内容)。也就是说,我可能会得到相关实体的过时状态,但仍然应该返回 something。
我们使用 Hibernate Search 的默认 IndexReader/Writer 实现。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
您应该在问题中指出您在哪里使用 NFS,由于锁定问题,Hibernate Search 参考手册明确禁止使用 NFS。如果您需要实时更新,请使用 Infinispan 目录,或者按照文档设置 JMS 主/从方法。您也可以使用 Amazon 队列服务编写后端。
标签: java hibernate lucene hibernate-search