2011-05-05 3 views
0

저는 Solr에서 NHibernate 통합과 함께 놀기 시작했습니다. 지금까지, 너무 좋아. 그러나 나는 문서의 어느 곳에서나 다룰 수없는 질문이 있습니다. 목록을 다음과 같이 매핑 할 수 있다는 것을 이해합니다.SolrNet/Hibernate- 하위 (HasMany) 클래스의 SolrField 사용?

[SolrField("blah")] 
public List<string> Blah {get;set;} 

하지만 맞춤 클래스를 사용하려면 어떻게해야합니까?

public IList<MyCustomClass> CustomList {get;set;} 

가 이상적으로 효과적으로 해당 필드의 목록을 만들고, MyCustomClass 내부에 하나의 필드를 매핑하고 싶습니다 : 내 NHibernate에 설치는 다음과 같이 보입니다. 이것이 가능한가? 나는 다음을 할 수 있었다 :

public IList<MyCustomClass> CustomList {get;set;} 

[SolrField("custom")] 
private List<DateTime> CustomFieldGetter { 
    get { 
     return CustomList.Select(c => c.DateField).ToList(); 
    } 
} 

그러나 그것은 거대한 kludge와 같게 보인다. 이견있는 사람?

답변

1

복합/중첩 된 개체 매핑은 not currently implemented in SolrNet입니다. Solr 색인은 플랫 구조 (thisthis 참조)이므로 SolrNet은 비정규 화 된 매핑 클래스를 권장합니다. 물론 이것은 관계형 데이터베이스 설계와 반대되는 부분이므로 Solr에 데이터를 전달하기 전에 데이터를 비정규 화하는 것은 전적으로 사용자의 몫입니다. 이 비정규 화는 필요한 쿼리의 종류에 따라 크게 다릅니다. 참조 및 힌트는 SchemaDesign wiki page을 참조하십시오.

실제로 무엇을하고 있는지 알면 MyCustomClass에 대한 사용자 지정 ISolrFieldParser 및 ISolrFieldSerializer를 작성하고 연결할 수 있습니다.

+0

감사합니다. 위에서 요약 한 CustomFieldGetter() 유형 솔루션으로 끝났습니다. 지저분하지만 작동합니다. – Alastair