我正在使用 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; }
然后拥有Person并Company返回将组件中的名称和所有字段Address组合成一个字符串的文本,然后由 Lucene 对其进行标记和索引。
然而,这让我觉得有点恶心。
我想学习完成这项任务的最佳和最少侵入性(从领域模型的角度)的方法 - 任何建议都值得赞赏:)