2

我在无模式模式下使用 Solr 6.1。在创建集合并索引示例数据之后,创建的字段都设置为 MultiValued = true,唯一 ID 除外。

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

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

一个例子来说明这个问题:

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

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
4

1 回答 1

7

无模式模式使一切multiValued成为可能,因为它不知道您是否有单个值,然后是同一字段的多值值。因此,它使所有字段都具有多值性,并且还将数字类型升级到最大。

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

于 2016-08-03T15:27:29.070 回答