2009-12-18 1 views
0

프로그래밍 방식으로 (즉, FieldAttribute을 사용하지 않고) NHibernate Search (Lucene.net)에 대한 인덱스 열을 추가하는 방법을 찾으려고합니다. .프로그래밍 방식으로 FieldAttribute를 사용하지 않고 NHibernate 검색 (Lucene.net)에 대한 인덱스 열을 추가하는 방법

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 클래스를 검사했을 때 특성에 Inherited = true이 지정되어 있지 않음을 발견했습니다.

그런 다음 나는 오버라이드 된 속성에 FieldAttribute을 추가했지만 NHibernate Search는 동일한 키를 가진 항목이 이미 사전에 추가되었다는 예외와 함께 예외적으로 발생했습니다. 타입 체인에는 FieldAttribute이라는 두 개의 똑같이 이름 지정된 속성이 있고 둘 중 하나만 허용하기 때문에 그럴 것입니다.

따라서 프로그래밍 방식으로 FieldAttribute을 사용하지 않으면 어떻게 해결할 수 있습니까?

답변

1

최근에 비 속성 매핑이 구현되었으므로 this blog post을 살펴보십시오.

+0

대, 그 편집을 잡을하지 않았다 그러나 나는 그 패치에있어 볼 수 기쁘게 생각합니다! –

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(); 
    } 
} 

코드 플렉스에서 호스팅되는 프로젝트 사이트를 살펴보아야합니다.

http://fnhsearch.codeplex.com/

관련 문제