2009-08-25 9 views
1

ich NHibernate.Search in meine Web-App von folgenden Tutorials aus den folgenden Quellen integriert haben:Lucene.NET Indizes werden nicht aktualisiert, wenn sie mit many-to-many-Beziehungen zu tun NHibernate.Search mit

ich habe meine Datenbank auch erfolgreich Batch-indiziert, und wenn sie gegen Luke testen, kann ich nach Begriffen suchen, in was auch immer Entitäten residieren ich als Wende markiert.

Allerdings, wenn ich versuche, viele-zu-viele Entitäten über meine Webanwendung zu aktualisieren, scheint mein übergeordneter Index nicht zu aktualisieren. Zum Beispiel:

public class Books 
{ 
    HasAndBelongsToMany(typeof(Author), Table = "BookAuthor", ColumnKey = "BookId", ColumnRef = "AuthorId")] 
    [IndexedEmbedded] 
    public IList<Author> Authors 
    { 
     get { return authors; } 
     set { authors = value; } 
    } 
} 

public class Author 
{ 
    HasAndBelongsToMany(typeof(Book), Table = "BookAuthor", ColumnKey = "AuthorId", ColumnRef = "BookId"), Inverse=true] 
    [ContainedIn] 
    public IList<Author> Authors 
    { 
     get { return authors; } 
     set { authors = value; } 
    } 
} 

Jetzt, wenn ich versuche, Dinge wie myBook.Authors.Add(Author.Create("xxx")) zu tun, kann ich sehen, dass mein Autor Index aktualisiert wurde, jedoch der Buchindex (das der übergeordnete Index) nicht aktualisiert wurde und die Suche nach Der neu hinzugefügte Autor gibt ein leeres Ergebnis zurück.

Beachten Sie, dass dies nur im Zusammenhang mit Viele-zu-Viele-Beziehungen geschieht.

Ich bin mir nicht sicher, warum das so ist. Hat jemand andere ähnliche Schwierigkeiten erlebt? Ich würde es begrüßen, wenn ich in die richtige Richtung zeigen könnte, Prost.

+0

Wie sich herausstellt, NHibernate.Search möglicherweise nicht vollständig umgesetzt haben Indizierung many-to -viele Beziehungen. Jemand korrigiert mich, wenn ich falsch liege. – sgtsunshine

Antwort

1

Ich habe kürzlich den Stamm von NHibernate Search aktualisiert, um dieses Problem zu beheben. Sie müssen herunterladen und den neuesten Code zu kompilieren und Ihre Konfiguration mit den entsprechenden Listener für die Sammlung Änderungen modifizieren zu propagieren ...

<listener class='NHibernate.Search.Event.FullTextIndexEventListener, NHibernate.Search' type='post-insert'/> 
<listener class='NHibernate.Search.Event.FullTextIndexEventListener, NHibernate.Search' type='post-update'/> 
<listener class='NHibernate.Search.Event.FullTextIndexEventListener, NHibernate.Search' type='post-delete'/> 
<listener class='NHibernate.Search.Event.FullTextIndexCollectionEventListener, NHibernate.Search' type='post-collection-recreate'/> 
<listener class='NHibernate.Search.Event.FullTextIndexCollectionEventListener, NHibernate.Search' type='post-collection-remove'/> 
<listener class='NHibernate.Search.Event.FullTextIndexCollectionEventListener, NHibernate.Search' type='post-collection-update'/> 
+0

Wenn ich 'cfg.SetListener (ListenerType.PostCollectionRecreate, new FullTextIndexCollectionEventListener());} verwende, wird' 'versucht, auf ein Element als einen mit dem Array inkompatiblen Typ zuzugreifen. 'Ausnahme'. Irgendwelche Tipps dazu? –

+0

Es ist in Ordnung, dass FullTextIndexCollectionEventListener leer ist? https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/branches/NHibernate.Search-NH3.x/NHibernate.Search/Event/FullTextIndexCollectionEventListener.cs –

+0

Vergesst ... das ist nur in der Zweigversion. Irgendwelche Neuigkeiten, wenn es in nh3.x nh.s Zweig enthalten sein wird? –