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; }        
}

现在我用 100 种产品填充 solr。产品的名称基于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从字符串中拆分了数字。奇怪的是,这不会发生在类别方面。

有谁知道出了什么问题/我做错了。

4

1 回答 1

2

这很可能是因为您为name索引中的字段使用的 Solr 字段类型。如果您仔细查看fieldTypeschema.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 回答