1

我正在使用 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是一个专门化为Personand的 NHibernate 实体Company,并且Address是一个 NHibernate 组件。

现在,我将如何最好地创建一个真正类似于 Google 的模糊搜索,其中包括 a 的所有字段LegalEntity,包括Address组件内的字段?

我的第一个想法是实现 anAddressFieldBridge来帮助引入Address组件的字段,然后只输入[Field]所有字段,但后来我找不到将 a 构造FuzzyQuery为多个搜索词之间的连接的方法。

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

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

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

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

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

4

1 回答 1

3

看看我的问题

Andrey创建了补丁来指定外部的 lucene 东西。语法不是超级干净(也许在这方面取得了一些进展,尚未检查),但我想它可以完成工作。

于 2010-02-15T14:31:19.293 回答