質問

nHibernate.Searchを取得してインデックスを作成するのに問題があります。

nHibernate.dllの1.2.1.4を使用する場合& nHibernate.Search.dllを実行すると、インデックスが正しく作成され、Luke(Luceneユーティリティ)で検査できます。 セグメントファイルとフラグメントファイルなどが作成されます

ただし、v2のnHibernate.dll&を使用する場合nHibernate.Search.dllの場合、インデックスは正しく作成されません。 Indexディレクトリには1kセグメントファイルのみが作成され、Lukeはそれを検査できません。

v1で使用したコードは次のとおりです。

_configuration = new Configuration();
_configuration.Configure();
_configuration.AddAssembly(typeof (Contact).Assembly);
_sessionFactory = _configuration.BuildSessionFactory();
SearchFactory.Initialize(_configuration, _sessionFactory);

そして設定ファイルに次のものがあります

<property name="hibernate.search.default.directory_provider">NHibernate.Search.Storage.FSDirectoryProvider, NHibernate.Search</property>
<property name="hibernate.search.default.indexBase">~/Index</property>

バージョン2では、SearchFactoryはありません。私が見つけた唯一の類似したものは

でした
SearchFactoryImpl.GetSearchFactory(_configuration);

だから私は次のように設定しました

_configuration = new Configuration();
_configuration.Configure();
_configuration.AddAssembly(typeof (Contact).Assembly);
_sessionFactory = _configuration.BuildSessionFactory();
_configuration.SetProperty("hibernate.search.default.directory_provider",
                                       "NHibernate.Search.Store.FSDirectoryProvider, NHibernate.Search");

_configuration.SetProperty("hibernate.search.default.indexBase", "Index");
_configuration.SetProperty("hibernate.search.analyzer",
                                        "Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net");


_configuration.SetListener(ListenerType.PostUpdate, new FullTextIndexEventListener());
_configuration.SetListener(ListenerType.PostInsert, new FullTextIndexEventListener());
_configuration.SetListener(ListenerType.PostDelete, new FullTextIndexEventListener());

SearchFactoryImpl.GetSearchFactory(_configuration);

これにより、インデックスのベアボーンが作成されますが、ルークでは表示できません-破損していることがわかります

また、次のコードを使用してインデックスを手動で作成しようとしましたが、セグメントファイルのみを作成し、それ以外は何も作成しませんでした

public void CreateIndex<T>(string rootIndexDirectory)
{
    Type type = typeof (T);

    var info = new DirectoryInfo(Path.Combine(rootIndexDirectory, type.Name));

    // Recursively delete the index and files in there
    if (info.Exists) info.Delete(true);

    // Now recreate the index
    FSDirectory dir = FSDirectory.GetDirectory(Path.Combine(rootIndexDirectory, type.Name), true);
    //Ioc.UrlProvider.MapPath(Path.Combine(rootIndexDirectory, type.Name)), true);

    try
    {
        var writer = new IndexWriter(dir, new StandardAnalyzer(), true);
        writer.Close();
    }
    finally
    {
        if (dir != null) 
            dir.Close();
    }

    using (ISession session = _sessionFactory.OpenSession())
    {
        using (IFullTextSession fullTextSession = Search.CreateFullTextSession(session)) 
        {
            foreach (var contact in _contacts)
            {
                //session.Save(contact);
                fullTextSession.Index(contact);
            }
        }
    }
}

だから私の質問は-nHibernate.Searchを使用する場合、nHibernateのv1.1.4を使用する必要がありますか? または、v2を使用できますか?その場合、私は何を間違えていますか?

これについてウェブ上にはほとんどありません。

誰ですか?

役に立ちましたか?

解決

ここで実際の例を見つけました:

http://darioquintana.com.ar/blogging/?p=21

このプロジェクトのv2 nHibernate.Search.dllにはSearchFactoryが含まれています(ただし、別のネームスペースにあります)。

SVNリポジトリからコンパイルしたものにはこれがありません

すべてソート済み

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top