我有以下课程:
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会从字符串中拆分数字。奇怪的是,这不会发生在类别方面。
有谁知道出了什么问题/我做错了。
答案 0 :(得分: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字段运行您的facet查询,您应该会看到预期的结果。