2009-12-18 57 views
0

我試圖找出如何以編程方式(即不使用FieldAttribute)爲NHibernate Search(Lucene.net)添加索引列, 。如何以編程方式爲NHibernate搜索(Lucene.net)添加索引列而不使用FieldAttribute

我有繼承問題,因爲FieldAttribute沒有自動繼承。

以下代碼說明了我想要做的事情。

class A 
{ 
    [Field(Index.Tokenized)] 
    public virtual string P1 
    { 
     get 
     { 
      return "P1"; 
     } 
    } 
} 

class B : A 
{ 
    public override string P1 
    { 
     get 
     { 
      return "P1+"; 
     } 
    } 
} 

我預計P1的覆蓋被索引,但它沒有。當我檢查FieldAttribute課程時,我發現它沒有在AttributeUsage屬性中指定的Inherited = true

然後,我將FieldAttribute添加到重寫的屬性,但導致NHibernate搜索引發異常,指出具有相同鍵的項目已添加到字典中。我認爲這是因爲在類型鏈中有兩個同名的屬性,它們都是FieldAttribute,它只接受一個屬性。

那麼,如何通過不使用FieldAttribute以編程方式解決此問題?

回答

1

最近實現了非屬性映射,請看this blog post

+0

太好了,我沒有看到那個編輯,但我很高興看到這個補丁進來了! – 2010-02-20 23:43:20

1

我剛剛開始了一個類似於FluentNHibarnate的Fluent NHibernate.Search映射接口,它允許您映射沒有屬性的實體。

public class BookSearchMap : DocumentMap<Book> 
{ 
    public BookSearchMap() 
    { 
     Id(p => p.BookId).Field("BookId").Bridge().Guid(); 
     Name("Book"); 
     Boost(500); 
     Analyzer<StandardAnalyzer>(); 

     Map(x => x.Title) 
      .Analyzer<StandardAnalyzer>() 
      .Boost(500); 

     Map(x => x.Description) 
      .Boost(500) 
      .Name("Description") 
      .Store().Yes() 
      .Index().Tokenized(); 
    } 
} 

您應該看看codeplex上託管的項目網站。

http://fnhsearch.codeplex.com/