2011-05-05 29 views
0

我已经开始使用Solr上的NHibernate集成。到目前为止,太棒了。但是我有一个问题,我无法看到文档中的任何地方。我知道我可以像这样映射列表:SolrNet/NHibernate-在子(HasMany)类上使用SolrField?

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

但是如果我想使用自定义类,该怎么办?我NHibernate的设置看起来像下面这样:

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

理想情况下,我想一个字段映射里面MyCustomClass,有效地使这一领域的列表。这可能吗?我可以做到以下几点:

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 2011-05-06 15:59:09