NHibernate搜索集群Lucene索引

时间:2010-03-05 17:18:33

标签: nhibernate search lucene

我们正在一个将要集群的应用程序中使用NHibernate Search。 我一直在阅读维护单独集合的方法,特别是主/从配置,我想知道如何使用MSMQ实现它,如果此时确实存在实现。 JMS实现(如NHibernate Search in Action中所述)对我来说似乎有点令人生畏,特别是当我们使用.NET环境时。

或者,我愿意接受有关为lucene集合实例化本地RAMDirectories的建议。我知道Lucene可以从FSDir构建一个RAMDir,我知道如何使用空白RAMDir初始化一个NHibernate应用程序,但是当我从一个现有的(网络共享的)FSDir初始化一个带有RAMDir的应用程序时,我有点迷失

或者其他任何方法。

干杯, 史蒂夫

1 个答案:

答案 0 :(得分:0)

我最近遇到过这个问题。主要是因为我们共享多个webapps的索引,以实现对索引的实时更新。然而,我们遭受了指数腐败,无法弄清楚原因,以及它不会在集群环境中发挥作用。

我的方法是:使用以非常频繁的间隔示意性地索引新实体的服务,以及在特定时间间隔重新索引所有内容。我也自动运行优化,因为NHSearch似乎还不支持自动优化。

在应用程序启动时,我将所有内容索引到RAMDirectoryProvider。

您所做的选择在很大程度上取决于您要编制索引的数据以及您对该数据延迟的敏感程度以及更改频率。在我的情况下,它是允许在网站的产品数据中进行文本搜索,所以任何延迟对我都没问题。

我做了一些关于Master-Slave提供者的简短研究,但是我觉得我认为NHSearch与原始的Java实现相比是相当不成熟的。

对我来说,最佳解决方案是拥有一个Master-Master提供程序,它可以在所有节点上交叉应用索引的所有更新。我没有研究自己编写一个DirectoryProvider会做多少工作,但这也是一个选择,但也要付出很多努力。