使用NHibernate搜索/Lucene时如何构造域模型
我正忙于NHibernate搜索和Lucene来创建一个可搜索的法律实体索引。我的域模型看起来有点像这样:使用NHibernate搜索/Lucene时如何构造域模型,nhibernate,lucene.net,nhibernate-search,Nhibernate,Lucene.net,Nhibernate Search,我正忙于NHibernate搜索和Lucene来创建一个可搜索的法律实体索引。我的域模型看起来有点像这样: [Indexed] public abstract class LegalEntity : AggregateRoot { public virtual Address Address { get; set; } } public class Person : LegalEntity { public virtual string FirstNames { get; se
[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组件
现在,我该如何创建一个真正像谷歌一样的模糊搜索,包括合法性
的所有字段,包括地址
组件中的字段
我的第一个想法是实现一个AddressFieldBridge
来帮助引入Address
组件的字段,然后在所有字段上加入[Field]
,但是我找不到一种方法来构造一个模糊查询
,作为多个搜索词之间的组合
我的下一个想法是在LegalEntity
上创建一个带有[Field]
标记的抽象属性,如下所示:
[Field(Index.Tokenized)]
public abstract string SearchableText { get; }
然后让Person
和Company
返回文本,将Address
组件中的名称和所有字段组合成一个字符串,然后由Lucene标记和索引
然而,这让我觉得有点恶心
我想学习完成这项任务的最佳和最少干扰(从领域模型的角度)的方法-任何建议都将不胜感激:)看看我的建议
创建了用于在外部指定lucene内容的修补程序。语法不是uber干净的(也许在这方面有一些进展,还没有检查),但我想它完成了任务