2012-02-07 2 views
2

하나의 NHibernate Search 인덱스에 여러 엔티티가 저장되어있어 한꺼번에 질의 할 수 있기를 바랍니다. 유스 케이스는 혼합 된 결과를 반환하는 간단한 검색 페이지입니다.NHibernate Search를 이용한 다형성 질의

public interface ISearchable {} 

[Indexed(Index = "TheIndex")] 
public class SearchableEntityA : ISearchable 
{ 
    // Some [Field]s 
} 

[Indexed(Index = "TheIndex")] 
public class SearchableEntityB : ISearchable 
{ 
    // Some other [Field]s 
} 

이 모든 인덱스 좋은, 물론 지금과 같은 원시 자 NHibernate에 쿼리 할 수 ​​있습니다 : : 그래서, 예를 들어, 코드는 다음과 같이 할 수

session.CreateCriteria<ISearchable>().List<ISearchable>(); 

내가 ISearchable에 대한 몇 가지 필드를 가지고 있지만, 이것들은 특별히 NHibernate 매핑에서 참조되지 않는다. 여러 다른 기관의 결과를 포함,

var query = "some keyword"; 
fullTextSession.CreateFullTextQuery<ISearchable>(query).List<ISearchable>(); 

을 그리고 ISearchables의 목록을 검색 :

희망 난 그냥 말할 수있는 것이 었습니다. 그러나 현실은 NHibernate.HibernateException: Not a mapped entity: NetComposites.Model.ISearchable을 던졌습니다.

그래서, NHibernate Search로 다형성 질의와 비슷한 것을 얻을 수있는 가장 간단한 방법은 무엇입니까?

답변

2

CreateFullTextQuery의 과부하는 당신이 검색 유형을 지정할 수있는 :

fullTextSession.CreateFullTextQuery(query, typeof(EntityA), typeof(EntityB)).List<ISearchable>(); 

그것은 모든 유형을 지정하는 데 조금 투박하지만 그들은 잘로드합니다. 내가 가지고있는 유일한 문제는 기본적으로 모든 필드 검색을 수행 할 수 있다는 가정이 올바르지 않기 때문에 모든 검색 가능한 엔터티의 모든 속성에 대해 MultiFieldQueryParser을 작성해야한다는 것입니다.