2009-04-16 75 views
3

我剛剛花了一整天的時間嘗試讓NHibernate.Search與NHibernate 2.0一起工作,很抱歉地說我還沒有管理它。我遇到了發佈的問題here並下載了該帖子鏈接的dll,但該示例使用搜索攔截器而不是EventListeners,我認爲這是更新的做事方式。似乎有很少的信息可用,我能找到的信息很難理解,並與其他信息相矛盾。將Nhibernate.Search與Nhibernate 2集成

在這一點上,我對整個事情感到非常沮喪,並且認真考慮編寫自己的Nhibernate和Lucene(或者另一個索引庫)的集成。目前看來,NHibernate.Search現在已經足夠成熟,足以讓我考慮使用它,我會更容易維護我自己的更簡化的庫。

我想知道的是,如果有一種使用NHibernate 2的NHibernate.Search的明確方式,以及在生產環境中是否可行。

+0

也許這不是正確的地方問這種問題 - 你有沒有嘗試NHibernate的貢獻組 - http://groups.google.com/group/nhcdevs/? – Rashack 2009-04-17 09:46:41

回答

7

爲了設置事件偵聽器,您需要添加以下代碼初始化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。