【发布时间】: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 是一个专门为 Person 和 Company 的 NHibernate 实体,Address 是一个 NHibernate 组件。
现在,我最好如何创建一个真正类似于 Google 的模糊搜索,其中包括 LegalEntity 的所有字段,包括 Address 组件内的字段?
我的第一个想法是实现一个AddressFieldBridge 来帮助引入Address 组件的字段,然后在所有字段上输入[Field],但后来我找不到构造方法FuzzyQuery 作为多个搜索词之间的连词。
我的下一个想法是在LegalEntity 上创建一个带有[Field] 标记的抽象属性,如下所示:
[Field(Index.Tokenized)]
public abstract string SearchableText { get; }
然后让Person 和Company 返回将名称和来自Address 组件的所有字段组合成一个字符串的文本,然后由Lucene 对其进行标记和索引。
然而,这让我觉得有点恶心。
我想学习完成这项任务的最佳和最少干扰(从领域模型的角度)的方法 - 任何建议都表示赞赏 :)
【问题讨论】:
标签: nhibernate lucene.net nhibernate-search