2009-04-16 5 views
3

Я только что провел весь день, пытаясь получить NHibernate.Search работает вместе с NHibernate 2.0, и мне жаль, что я все еще не справился с этим. Я столкнулся с проблемой, опубликованной here, и загрузил dll, связанный с этим сообщением, однако в этом примере используется поиск Interceptor, а не EventListeners, который, я считаю, является более новым способом делать вещи. Кажется, что очень мало информации, и что я могу найти, трудно понять и противоречить другим частям информации.Интеграция Nhibernate.Поиск с Nhibernate 2

На данный момент я очень расстроен всем этим и серьезно рассматриваю возможность написать собственную интеграцию Nhibernate и Lucene (или, возможно, другую библиотеку индексирования). На данный момент кажется, что NHibernate.Search сейчас не достаточно зрелый, чтобы я мог его использовать, мне было бы гораздо удобнее поддерживать мою более упрощенную библиотеку.

Что я хотел бы знать, если существует определенный способ использования NHibernate.Search с NHibernate 2 и можно ли использовать его в производственной среде.

+0

Возможно, это не подходящее место, чтобы задать этот вопрос - вы пробовали NHibernate contrib group - http://groups.google.com/group/nhcdevs/? – Rashack

ответ

7

Для того, чтобы настройки 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.