使用NHibernate Search / Lucene时如何构建域模型

时间:2010-01-12 12:34:54

标签: nhibernate lucene.net nhibernate-search

我正在搞乱NHibernate Search和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是一个NHibernate实体,专门用作PersonCompanyAddress是一个NHibernate组件。

现在,我如何才能最好地创建一个类似Google的模糊搜索,其中包含LegalEntity的所有字段,包括Address组件中的字段?

我的第一个想法是实现一个AddressFieldBridge来帮助引入Address组件的字段,然后只在所有字段中输入[Field],但我可以没有找到一种方法来构建FuzzyQuery作为多个搜索词之间的联合。

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

    [Field(Index.Tokenized)]
    public abstract string SearchableText { get; }

然后让PersonCompany返回将名称和Address组件中的所有字段组合成一个字符串的文本,然后由Lucene对其进行标记化和索引。

然而,这让我觉得有点狡猾。

我想学习最好和最少侵入性(从域模型的角度来看)完成这项任务的方法 - 任何建议都值得赞赏:)

1 个答案:

答案 0 :(得分:3)

看一下我的question

Andrey创建补丁以指定外部的lucene东西。语法不是很干净(也许在这方面已经取得了一些进展,没有检查过),但我想它可以完成任务。