这是对象模型。当我尝试将Product提交到Solr时,返回unknown field loca
public class Product
{
[SolrUniqueKey("id")]
public string Id { get; set; }
[SolrField("manu")]
public string Manufacturer { get; set; }
[SolrField("cat")] // cat is a multiValued field
public ICollection<string> Categories { get; set; }
[SolrField("price")]
public decimal Price { get; set; }
[SolrField("inStock")]
public bool InStock { get; set; }
[SolrField("loca")]
public Location Location { set; get; }
}
public class Location
{
[SolrField("zipcode")]
public int Zip { set; get; }
[SolrField("country")]
public string Country { set; get; }
}
嵌套类是否合法使用solr?
为什么没有存储?当我删除[SolrField("loca")]
时,它可以正常工作。
你如何存储这些类?
答案 0 :(得分:1)
您无法在Solr中执行嵌套类。因此,您需要将位置信息展平到Product类中。但是,您可以根据需要将数据映射到/取出Solr,从而在应用程序中将其表示为嵌套类。
例如,更新您的Solr架构以存储loca_zipcode和loca_country字段,然后将它们映射到新定义的SolrProduct类中,如下所示:
public class SolrProduct
{
[SolrUniqueKey("id")]
public string Id { get; set; }
[SolrField("manu")]
public string Manufacturer { get; set; }
[SolrField("cat")] // cat is a multiValued field
public ICollection<string> Categories { get; set; }
[SolrField("price")]
public decimal Price { get; set; }
[SolrField("inStock")]
public bool InStock { get; set; }
[SolrField("loca_zip")]
public int Zip { set; get; }
[SolrField("loca_country")]
public string Country { get; set; }
}
然后,您可以使用AutoMapper之类的内容将SolrProduct
展平类映射到嵌套Product
类的Location
类。
另一种方法是在Solr中使用dynamic fields,在SolrNet中使用Dictionary进行动态映射支持。有关更多详细信息和示例,请参阅SolrNet wiki的SolrNet - Mapping部分。