【发布时间】:2012-11-03 22:36:38
【问题描述】:
我有一个使用 Lucene.Net 和 NHibernate.Search 作为全文搜索引擎的 Web 应用程序。 NHibernate.Search 的设置使得每当数据库中发生更改时,它都会传播到 Lucene 索引。
Web 应用程序正在使用 4 个工作进程运行。首先,这是一个问题吗?我注意到 Lucene 索引不是 100% 与数据库同步。对数据库的某些更改未出现在 Lucene 索引中。但是,当我手动尝试重新索引数据时,效果很好。
在多进程环境中使用 Lucene.Net 是否有任何并发影响?
【问题讨论】:
-
您还应该记住,IndexReader 仅适用于打开时存在的索引 - 如果在打开 IndexReader 后更新了索引,您将看不到那些新文档。
-
@MarkLeightonFisher 问题是由于
LockObtainTimeouts- 首先我关闭了 NHibernate 记录器,因此无法检测到它。问题是当触发这样的超时时,该项目不会被保存。我仍然需要找到所有这些超时的确切原因。 -
你对这个 Karl 有什么好运吗?
-
@coalvilledave - 不,很遗憾还没有!随机地,当使用相同的 Lucene 索引时,进程会崩溃,或者无限期地锁定。为了避免这种情况,我添加了一个后台进程,它监视索引中是否存在任何过度就位的锁,并自动删除它们。我对这个解决方案并不感到自豪,但它可以工作并且没有时间重新设计系统以使用 SOLR,因为它似乎应该是最好的方法,或者将搜索拆分到外部进程。
标签: c# nhibernate concurrency lucene.net nhibernate-search