2012-10-07 82 views
0

這裏model.When我嘗試提交產品到Solr的對象,返回unknown field locaSolr的返回400

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")]它工作正常。

你怎麼存儲這樣的類?

回答

1

你不能在Solr中做嵌套類。所以您需要將位置信息平鋪到Product類中。但是,您可以在應用程序中將其表示爲嵌套類,方法是根據需要將數據映射到Solr或從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拼合類到0123'類與嵌套Location類。

另一種方法是在Solr中使用dynamic fields,並在SolrNet中使用Dictionary來動態映射支持。請參閱SolrNet wiki的SolrNet - Mapping部分以獲取更多詳細信息和示例。

+0

我明白了,那很好。我會去做。感謝您的回答。 – DarthVader

+0

我有點兒希望solr能幫我。 :) – DarthVader