Solr Schemaless 模式将字段创建为多值
Solr Schemaless Mode creating fields as MultiValued
我在无模式模式下使用 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
无模式模式使所有内容都变得 multiValued
因为它不知道同一字段是否有单值后跟多值值。所以它使所有字段成为多值,并将数字类型升级为最大。
如果您非常了解自己的域,这很容易调整。整个映射链在 solrconfig.xml 的更新请求处理器链 (add-unknown-fields-to-the-schema) 中定义,您可以将类型映射从多值类型更改为等效的单值类型。对于字符串,您可以更改 defaultFieldType
.
中的值
我在无模式模式下使用 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
无模式模式使所有内容都变得 multiValued
因为它不知道同一字段是否有单值后跟多值值。所以它使所有字段成为多值,并将数字类型升级为最大。
如果您非常了解自己的域,这很容易调整。整个映射链在 solrconfig.xml 的更新请求处理器链 (add-unknown-fields-to-the-schema) 中定义,您可以将类型映射从多值类型更改为等效的单值类型。对于字符串,您可以更改 defaultFieldType
.