0

这是对象模型。当我尝试将产品提交给 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")]它工作正常。

你如何存储这些类?

4

1 回答 1

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 中的动态字段和 SolrNet 中使用 Dictionary 的动态映射支持。有关更多详细信息和示例,请参阅 SolrNet wiki 的SolrNet - 映射部分。

于 2012-10-08T00:47:11.210 回答