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 からマッピングしたりすることで、アプリケーション内でネストされたクラスとして表すことができます。

例として、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; }
}

次に、AutoMapperSolrProductなどを使用して、フラット化されたクラスProductをネストされたクラスを持つクラスにマップできますLocation

もう 1 つの方法は、Solr で動的フィールドを使用し、辞書を使用して SolrNet で動的マッピングをサポートすることです。詳細と例については、SolrNet wiki のSolrNet - Mappingセクションを参照してください。

于 2012-10-08T00:47:11.210 に答える