使用NHibernate.Search处理多对多关系时,Lucene.NET索引不会更新

时间:2009-08-25 14:27:06

标签: .net lucene.net castle-activerecord nhibernate.search

我已经通过以下来自以下来源的教程将NHibernate.Search集成到我的网络应用程序中:

我还成功批量索引了我的数据库,在对Luke进行测试时,我可以搜索驻留在我标记为可索引的任何实体中的术语。

然而,当我尝试通过我的网络应用更新多对多实体时,我的父索引似乎没有更新。例如:

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"))之类的操作时,我可以看到我的作者索引已经更新,但是,Book索引(它是父索引)尚未更新并且正在搜索新添加的内容author返回一个空结果。

请注意,这仅在处理多对多关系时发生。

我不确定为什么会这样。有没有其他人遇到类似的困难?如果能指出正确的方向,我会很感激,欢呼。

1 个答案:

答案 0 :(得分:1)

我最近更新了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'/>