3

NHibernate.SearchをNHibernate2.0と一緒に動作させるために一日中過ごしましたが、まだ管理していないと申し訳ありません。ここに投稿された問題に遭遇し、その投稿によってリンクされたdllをダウンロードしましたが、この例では、EventListenersではなく検索Interceptorを使用しています。これは、新しい方法であると考えています。入手できる情報は非常に少ないようで、私が見つけたものは理解するのが難しく、他の情報と矛盾しています。

この時点で、私は全体にかなり不満を感じており、NhibernateとLucene(またはおそらく別のインデックスライブラリ)の独自の統合を作成することを真剣に検討しています。現時点では、NHibernate.Searchは、私がそれを使用することを検討するのに十分成熟しているようです。私は、自分のかなり単純化されたライブラリを維持する方がはるかに快適です。

私が知りたいのは、NHibernateを使用する決定的な方法があるかどうか、そしてNHibernate 2で検索し、これを実稼働環境で使用できるかどうかです。

4

1 に答える 1

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());

これは、Lucene2.0およびNHibernate2.0で機能するはずです。

于 2009-04-17T15:00:14.853 に答える