Solr Schemaless模式将字段创建为MultiValued

时间:2016-08-02 20:38:35

标签: indexing solr solrnet schemaless

我在Schemaless模式下使用Solr 6.1。创建集合并索引样本数据后,创建的字段全部设置为MultiValued = true,但唯一ID除外。

问题是当使用SolrNet查询这些数据时,它无法正确地将结果映射到模型。查询结果作为数组返回,并要求模型中的所有属性都更新为ICollection类型。

无论如何我们可以在索引样本数据时将这些字段设置为MultiValued = false吗?

说明问题的一个例子:

1)在Schemaless模式下索引以下模型的样本:

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

    [SolrField("guid")]
    public Guid Guid { get; set; }
}

2)Solr的托管模式文件将添加以下字段

  <field name="guid" type="strings"/>
  <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>

3)查询/映射模型时出错

Object of type 'System.Collections.ArrayList' cannot be converted to type

1 个答案:

答案 0 :(得分:4)

无模式模式会生成所有内容multiValued,因为它不知道您是否有单个值后跟同一字段的多值。因此,它使所有字段都是多值的,并且还将数字类型升级到最大值。

如果您熟悉您的域名,这很容易调整。整个映射链在solrconfig.xml的更新请求处理器链(add-unknown-fields-to-the-schema)中定义,您可以将类型映射从多值类型更改为等效的单值类型。对于字符串,您可以更改defaultFieldType

中的值