nhibernate - 将 Nhibernate.Search 与 Nhibernate 2 集成

标签 nhibernate nhibernate.search

我刚刚花了一整天时间尝试让 NHibernate.Search 与 NHibernate 2.0 一起工作,很遗憾地说我仍然没有成功。我遇到了发布 here 的问题并下载了该帖子链接的 dll,但是该示例使用搜索拦截器而不是 EventListeners,我认为这是较新的做事方式。似乎可用的信息很少,我能找到的东西很难理解,并且与其他信息相矛盾。

在这一点上,我对整个事情感到非常沮丧,并且正在认真考虑编写我自己的 Nhibernate 和 Lucene(或者可能是另一个索引库)的集成。目前看来 NHibernate.Search 还远未成熟到让我考虑使用它的地步,我更愿意维护我自己的更简化的库。

我想知道的是,是否存在将 NHibernate.Search 与 NHibernate 2 一起使用的明确方法,以及在生产环境中使用它是否可行。

最佳答案

为了设置 EventListeners,您需要在初始化 NHibernate 时添加此代码:

NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
//Load configuration

//Add NHibernate.Search listeners
cfg.SetListener(NHibernate.Event.ListenerType.PostUpdate, new FullTextIndexEventListener());
cfg.SetListener(NHibernate.Event.ListenerType.PostInsert, new FullTextIndexEventListener());
cfg.SetListener(NHibernate.Event.ListenerType.PostDelete, new FullTextIndexEventListener());

var factory = cfg.BuildSessionFactory();

必须更改您的 web.config/app.config 文件以包含以下内容:

<configuration>

    <configSections>
        <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" requirePermission="false"/>
        <section name="nhs-configuration" type="NHibernate.Search.Cfg.ConfigurationSectionHandler, NHibernate.Search" requirePermission="false"/>
    </configSections>

    <!-- NHibernate.Search -->
    <nhs-configuration xmlns='urn:nhs-configuration-1.0'>
        <search-factory>
            <property name='hibernate.search.default.directory_provider'>NHibernate.Search.Store.FSDirectoryProvider, NHibernate.Search</property>


            <property name='hibernate.search.default.indexBase'>PATH TO LUCENE.NET STORE</property>

            <property name='hibernate.search.indexing_strategy'>event</property>
        </search-factory>
    </nhs-configuration>

    <appSettings>
        <add key="Lucene.Net.lockdir" value="SAME PATH AS ABOVE" />
    </appSettings>

    ...

最后:当您创建一个 ISession 实例时,请记住使用此代码来获取 IFullTextSession。

IFullTextSession session = Search.CreateFullTextSession(factory.OpenSession());

这应该适用于 Lucene 2.0 和 NHibernate 2.0。

关于nhibernate - 将 Nhibernate.Search 与 Nhibernate 2 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/756860/

相关文章:

nhibernate - 我如何过滤我的 Lucene 搜索结果?

.net - NHibernate Linq 查询比 HQL 慢 3 倍

NHibernate.Search 索引重建

nhibernate - 测绘生产数据库

nhibernate - QueryOver IN 子句?

winforms - WinForms 的 NHibernate 设计

database - 将 NHibernate 与查找表结合使用

lucene - Solr 或 Nhibernate 搜索

NHibernate QueryOver 仅用于父类(super class)

hibernate-search - (N)Hibernate.Search : Index different properties in one field