我正在搞乱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
是一个NHibernate实体,专门用作Person
和Company
,Address
是一个NHibernate组件。
现在,我如何才能最好地创建一个类似Google的模糊搜索,其中包含LegalEntity
的所有字段,包括Address
组件中的字段?
我的第一个想法是实现一个AddressFieldBridge
来帮助引入Address
组件的字段,然后只在所有字段中输入[Field]
,但我可以没有找到一种方法来构建FuzzyQuery
作为多个搜索词之间的联合。
我的下一个想法是在[Field]
上创建一个标有LegalEntity
的抽象属性,如下所示:
[Field(Index.Tokenized)]
public abstract string SearchableText { get; }
然后让Person
和Company
返回将名称和Address
组件中的所有字段组合成一个字符串的文本,然后由Lucene对其进行标记化和索引。
我想学习最好和最少侵入性(从域模型的角度来看)完成这项任务的方法 - 任何建议都值得赞赏:)