Frage

Ich habe Probleme nHibernate.Search immer einen Index zu erstellen.

Wenn ich 1.2.1.4 von nHibernate.dll & nHibernate.Search.dll verwenden dann der Index korrekt erstellt, und ich kann es mit Luke inspizieren (ein Lucene-Dienstprogramm). Eine Segment-Datei wird erstellt sowie eine Fragment etc Datei

Allerdings, wenn ich v verwenden 2 von nHibernate.dll & nHibernate.Search.dll dann wird der Index nicht korrekt erstellt. Nur eine 1k-Segment-Datei wird im Index-Verzeichnis erstellt und Luke ist nicht in der Lage, es zu überprüfen.

Der Code, den ich in v1 verwendet wurde, war wie folgt:

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

und ich habe folgend in der Konfigurationsdatei

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

in Version 2 gibt es keine SearchFactory. Das einzige, ähnlich, was ich finden konnte, war

SearchFactoryImpl.GetSearchFactory(_configuration);

So habe ich die Config wie folgt festgelegt

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

Damit sind die nackten Knochen eines Index, aber es ist nicht sichtbar mit Luke - die mir sagt, es ist korrupt

Ich habe auch den folgenden Code den Index manuell zu versuchen und zu erstellen, aber auch hier schafft nur die Segmente Datei, nichts anderes

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

Meine Frage ist also - ich v1.1.4 von nHibernate zu verwenden, wenn ich nHibernate.Search verwenden? Oder kann ich v2 verwenden? In diesem Fall, was mache ich falsch?

Es gibt sehr wenig auf dem Internet über diese.

Wer?

War es hilfreich?

Lösung

Ich habe ein funktionierendes Beispiel hier:

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

Die v2 nHibernate.Search.dll in diesem Projekt enthält eine SearchFactory (wenn auch in einem anderen Namespace).

Der, den ich aus der SVN-Repository zusammengestellt müssen nicht diese haben

Also alles sortiert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top