SolrNet - 分面搜索错误的结果

时间:2012-07-04 19:14:31

标签: c# asp.net entity-framework solrnet faceted-search

我有以下课程:

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会从字符串中拆分数字。奇怪的是,这不会发生在类别方面。

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

1 个答案:

答案 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查询,您应该会看到预期的结果。