2011-03-18 81 views
0

我使用nhibernate/ActiveRecord项目进行了nHibernate搜索。Nhibernate搜索更新后监听器

我想让我的更新后的侦听器正常工作,但似乎每次我更新一个装饰有[Indexed]属性的对象时,它会导致nhibernate.search创建一个新的IndexReader( Workspace.cs GetIndexReader方法),大约需要30秒!

任何想法为什么nhibernate.search是这样做的?

继承人我的配置

<configSections> 
    <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" /> 
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/> 
    </configSections> 
    <activerecord isWeb="true"> 
    <config> 
     <add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver" /> 
     <add key="dialect" value="NHibernate.Dialect.MsSql2000Dialect" /> 
     <add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" /> 
     <add key="connection.connection_string" value="Data Source=***;user id=****;password=****;Initial Catalog=*****" /> 
     <add key="hibernate.search.default.directory_provider" value="NHibernate.Search.Store.FSDirectoryProvider, NHibernate.Search" /> 
     <add key="hibernate.search.default.indexBase" value="C:\LuceneIndex" /> 
     <add key="hibernate.search.analyzer" value="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net"/> 
     <add key="hibernate.search.indexing_strategy" value="event" /> 
     <add key="hibernate.search.reader.strategy" value="shared" /> 
    </config> 
    </activerecord> 
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="proxyfactory.factory_class"> NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu </property> 
     <event type="delete"> 
     <listener class="SoftDeleteListener, Mydll"/> 
     </event> 
     <event type="post-update"> 
     <listener class="NHibernate.Search.Event.FullTextIndexEventListener, NHibernate.Search" /> 
     </event> 
     <event type="post-insert"> 
     <listener class="NHibernate.Search.Event.FullTextIndexEventListener, NHibernate.Search" /> 
     </event> 
     <event type="post-delete"> 
     <listener class="NHibernate.Search.Event.FullTextIndexEventListener, NHibernate.Search" /> 
     </event> 
    </session-factory> 
    </hibernate-configuration> 

我programitcally加入我的事件监听器(更新后现在只)

NHibernate.Cfg.Configuration configuration = ActiveRecordMediator.GetSessionFactoryHolder().GetConfiguration(typeof(ActiveRecordBase)); 
configuration.SetListeners(ListenerType.PostUpdate, new IPostUpdateEventListener[] { new FullTextIndexEventListener() }); 

回答

1

原来我的申请被抛出一个异常,但并没有回升,除非我调试。

0

你不需要programmaticaly添加监听器,如果你将它们添加通过配置。

你试过从配置中删除以下行:

<add key="hibernate.search.indexing_strategy" value="event" /> 
<add key="hibernate.search.reader.strategy" value="shared" />