【问题标题】:How to structure domain model when using NHibernate Search/Lucene使用 NHibernate Search/Lucene 时如何构建域模型
【发布时间】:2023-03-12 14:46:02
【问题描述】:

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

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

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

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

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

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

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

我想学习完成这项任务的最佳和最少干扰(从领域模型的角度)的方法 - 任何建议都表示赞赏 :)

【问题讨论】:

    标签: nhibernate lucene.net nhibernate-search


    【解决方案1】:

    看看我的question

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 2010-12-17
      • 2014-03-14
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多