我正在使用 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
and的 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 对其进行标记和索引。
然而,这让我觉得有点恶心。
我想学习完成这项任务的最佳和最少侵入性(从领域模型的角度)的方法 - 任何建议都值得赞赏:)