Интеграция Nhibernate.Search с Nhibernate 2 - PullRequest
3 голосов
/ 16 апреля 2009

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

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

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

1 Ответ

7 голосов
/ 17 апреля 2009

Чтобы настроить 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.

...