Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SolrNet/NHibernate-在child(HasMany)类上使用SolrField?_Nhibernate_Solrnet - Fatal编程技术网

SolrNet/NHibernate-在child(HasMany)类上使用SolrField?

SolrNet/NHibernate-在child(HasMany)类上使用SolrField?,nhibernate,solrnet,Nhibernate,Solrnet,我开始在Solr上玩NHibernate集成。到目前为止,一切都很好。但我有一个问题,我看不到在文件中的任何地方。我知道我可以绘制这样的列表: [SolrField("blah")] public List<string> Blah {get;set;} [SolrField(“废话”)] 公共列表Blah{get;set;} 但是如果我想使用自定义类呢?我的NHibernate设置如下所示: public IList<MyCustomClass> CustomLis

我开始在Solr上玩NHibernate集成。到目前为止,一切都很好。但我有一个问题,我看不到在文件中的任何地方。我知道我可以绘制这样的列表:

[SolrField("blah")]
public List<string> Blah {get;set;}
[SolrField(“废话”)]
公共列表Blah{get;set;}
但是如果我想使用自定义类呢?我的NHibernate设置如下所示:

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

[SolrField("custom")]
private List<DateTime> CustomFieldGetter {
    get {
        return CustomList.Select(c => c.DateField).ToList();
    }
}
public IList CustomList{get;set;}
理想情况下,我希望在MyCustomClass中映射单个字段,有效地创建该字段的列表。这可能吗?我可以做到以下几点:

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

[SolrField("custom")]
private List<DateTime> CustomFieldGetter {
    get {
        return CustomList.Select(c => c.DateField).ToList();
    }
}
public IList CustomList{get;set;}
[索尔菲尔德(“定制”)]
私有列表CustomFieldGetter{
得到{
返回CustomList.Select(c=>c.DateField.ToList();
}
}

但这似乎是一个巨大的障碍。有什么想法吗?

映射复合/嵌套对象是可行的。Solr索引是一个平面结构(请参见和),因此SolrNet鼓励非规范化映射类。这当然与关系数据库设计相反,所以在将数据提供给Solr之前,您需要先对数据进行非规范化处理。这种非规范化在很大程度上取决于您需要的查询类型。有关参考和提示,请参阅


如果您真的知道自己在做什么,您可以尝试为MyCustomClass编写并连接自定义的IsorFieldParser和IsorFieldSerializer。

谢谢-我最终选择了上面介绍的CustomFieldGetter()类型的解决方案。凌乱,但它能工作。