0

私は次のクラスを持っています:

public class Product
{
    public Product()
    {
        Categories = new List<Category>();
    }

    [SolrUniqueKey("id")]
    public int Id { get; set; }

    [SolrField("name")]
    public string Name { get; set; }

    [SolrField("cat")]
    public virtual List<Category> Categories { get; set; }        
}

今、solr に 100 個の製品を入力します。製品の名前はtestitem[i]に基づいており、 iは製品の番号です。(0-99)。

これは、正常に機能するカテゴリにも当てはまります。しかし、名前にファセットを要求すると、次の結果が得られます。

<int name="testitem">100</int>
<int name="0">1</int>
<int name="1">1</int>
<int name="10">1</int>
<int name="11">1</int>
<int name="12">1</int>
<int name="13">1</int>
<int name="14">1</int>
<int name="15">1</int>
<int name="16">1</int>
etc..

ご覧のとおり、これは正しくありません。solr がstringからnumberを分割しているようです。奇妙なことに、これはカテゴリ ファセットでは発生しません。

何がうまくいかないのか誰か知っていますか/私は間違っています。

4

1 に答える 1

2

これはおそらくname、インデックス内のフィールドに使用している Solr フィールド タイプが原因です。fieldTypeの schema.xmlの定義をよく見ると、nameおそらくtext_generalこれらのフィールドは、入力した値をトークン化するため、名前の値がテキストと数値の値に分割されます。この場合、ファセット値を格納するために別のフィールドを使用し、Copy Fieldディレクティブを使用して名前の値をこの新しいフィールドに移動することをお勧めします。

したがって、スキーマは次のようになります...

 <field name="name" type="text_general" stored="true" indexed="true" />
 <field name="name_facet" type="string" stored="true" indexed="true" />

 <copyField source="name" dest="name_facet" />

次に、name_facet フィールドに対してファセット クエリを実行すると、期待どおりの結果が表示されます。

于 2012-07-05T16:07:45.500 に答える