2010-01-12 36 views
1

我正在搞NHibernate Search和Lucene來創建一個可搜索的法律實體索引。我的域模型看起來有點像這樣:如何使用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是專門爲PersonCompany的NHibernate的實體,並且Address是NHibernate的組成部分。

現在,我將如何最好地創建一個類似Google的模糊搜索,其中包含LegalEntity的所有字段,包括Address組件中的所有字段?

我的第一個想法是實施AddressFieldBridge在將在Address組件領域幫助,然後就扔在[Field]上的所有領域,但我無法找到一個方法來構建一個FuzzyQuery爲連詞在多個搜索詞之間。

我的下一個想法是在LegalEntity創建標記[Field]抽象屬性,像這樣:

[Field(Index.Tokenized)] 
    public abstract string SearchableText { get; } 

,然後有PersonCompany迴文本相結合的名字和所有字段從Address組件爲一體字符串,然後由Lucene進行標記和索引。

然而,這讓我感覺很噁心。

我想最好的學習和侵入性最小(從域模型的角度)的方式來完成這個任務 - 任何建議表示讚賞:)

回答

3

看看我question

Andrey創建補丁來指定外部的lucene內容。語法不是非常乾淨(也許有一些進展,沒有檢查),但我想它完成工作。