Индексы Lucene.NET не обновляются при работе с отношениями «многие ко многим» с использованием NHibernate.Search - PullRequest
1 голос
/ 25 августа 2009

Я интегрировал NHibernate.Search в свое веб-приложение, следуя инструкциям из следующих источников:

Я также успешно проиндексировал свою базу данных партиями, и при тестировании на Люке я могу искать термины, которые находятся в любых объектах, которые я пометил как индексируемые.

Однако , когда я пытаюсь обновить сущности «многие ко многим» через мое веб-приложение, мой родительский индекс не обновляется. Например:

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

Теперь, когда я пытаюсь сделать что-то вроде myBook.Authors.Add(Author.Create("xxx")), я вижу, что мой индекс Автор был обновлен, однако, индекс Книги (который является родительским индексом) не был обновлен, и поиск вновь добавленного автора возвращает пустой результат.

Обратите внимание, что это происходит только при работе с отношениями "многие ко многим".

Я не уверен, почему это так. Кто-нибудь еще испытывал подобные трудности? Я был бы признателен, если бы меня указали в правильном направлении, ура.

1 Ответ

1 голос
/ 07 февраля 2010

Я недавно обновил ствол NHibernate Search, чтобы исправить эту проблему. Вам нужно будет скачать и скомпилировать последний код и изменить ваш конфиг с соответствующими слушателями для изменений коллекции, чтобы распространить ...

<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'/>
...