使用NHibernate搜索/Lucene时如何构造域模型

使用NHibernate搜索/Lucene时如何构造域模型,nhibernate,lucene.net,nhibernate-search,Nhibernate,Lucene.net,Nhibernate Search,我正忙于NHibernate搜索和Lucene来创建一个可搜索的法律实体索引。我的域模型看起来有点像这样: [Indexed] public abstract class LegalEntity : AggregateRoot { public virtual Address Address { get; set; } } public class Person : LegalEntity { public virtual string FirstNames { get; se

我正忙于NHibernate搜索和Lucene来创建一个可搜索的法律实体索引。我的域模型看起来有点像这样:

[Indexed]
public abstract class LegalEntity : AggregateRoot
{
    public virtual Address Address { get; set; }
}

public class Person : LegalEntity
{
    public virtual string FirstNames { get; set; }
    public virtual string LastName { get; set; }
}

public class Company: LegalEntity
{
    public virtual string Name { get; set; }
}

public class Address : Component
{
    public virtual string Street { get; set; }
    public virtual string HouseNumber { get; set; }
    // etc...
}
正如子类化所暗示的,
LegalEntity
是一个专门化为
Person
Company
的NHibernate实体,
Address
是一个NHibernate组件

现在,我该如何创建一个真正像谷歌一样的模糊搜索,包括
合法性
的所有字段,包括
地址
组件中的字段

我的第一个想法是实现一个
AddressFieldBridge
来帮助引入
Address
组件的字段,然后在所有字段上加入
[Field]
,但是我找不到一种方法来构造一个
模糊查询
,作为多个搜索词之间的组合

我的下一个想法是在
LegalEntity
上创建一个带有
[Field]
标记的抽象属性,如下所示:

    [Field(Index.Tokenized)]
    public abstract string SearchableText { get; }
然后让
Person
Company
返回文本,将
Address
组件中的名称和所有字段组合成一个字符串,然后由Lucene标记和索引

然而,这让我觉得有点恶心

我想学习完成这项任务的最佳和最少干扰(从领域模型的角度)的方法-任何建议都将不胜感激:)

看看我的建议

创建了用于在外部指定lucene内容的修补程序。语法不是uber干净的(也许在这方面有一些进展,还没有检查),但我想它完成了任务