Question

Je ne parviens pas à obtenir nHibernate.Search pour créer un index.

Si j’utilise 1.2.1.4 de nHibernate.dll & amp; nHibernate.Search.dll alors l'index est créé correctement et je peux l'inspecter avec Luke (un utilitaire Lucene). Un fichier de segments est créé ainsi qu'un fichier de fragments, etc.

Cependant, lorsque j'utilise la version 2 de nHibernate.dll & amp; nHibernate.Search.dll, alors l'index n'est pas créé correctement. Seul un fichier de segments 1k est créé dans le répertoire Index et Luke n’est pas en mesure de l’examiner.

Le code que j'ai utilisé dans la v1 était le suivant:

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

et j'ai les éléments suivants dans le fichier de configuration

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

dans la version 2, il n'y a pas de SearchFactory. La seule chose similaire que j'ai pu trouver était

SearchFactoryImpl.GetSearchFactory(_configuration);

J'ai donc configuré la configuration comme suit

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

Cela crée les bases d'un index, mais il n'est pas visible avec Luke - ce qui me dit qu'il est corrompu

J'ai également utilisé le code suivant pour essayer de créer l'index manuellement, mais là encore, il ne crée que le fichier de segments, rien d'autre

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

Ma question est donc la suivante: dois-je utiliser la version 1.1.4 de nHibernate si je souhaite utiliser nHibernate.Search? Ou puis-je utiliser v2? Dans quel cas que je fais mal?

Il y a très peu d'internet à ce sujet.

Quelqu'un?

Était-ce utile?

La solution

J'ai trouvé un exemple de travail ici:

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

La v2 nHibernate.Search.dll de ce projet contient une SearchFactory (bien que dans un espace de noms différent).

Celui que j'ai compilé à partir du référentiel SVN n'a pas cette

Donc tous triés

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top