【问题标题】:Solr Schemaless Mode creating fields as MultiValuedSolr 无模式模式将字段创建为多值
【发布时间】:2016-12-08 08:59:46
【问题描述】:

我在无模式模式下使用 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

【问题讨论】:

  • 那么,你问是否有办法在无模式模式下建立索引,并且仍然以某种方式将一个字段设置为只有 singleValue,对吧?
  • 是的,确切地说,我正在尝试以无模式模式运行 Solr,但动态字段创建正在将所有内容创建为多值类型。这样做会在将结果映射回模型而不将我的所有属性转换为 ICollection 类型时导致问题。

标签: indexing solr solrnet schemaless


【解决方案1】:

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

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

【讨论】:

  • 感谢 Alex,这是非常有用的信息,但是如果我将默认类型定义为单值类型,那么当我尝试索引多值数组类型时会发生什么?换句话说,这将如何影响字段创建的正常工作?
  • 好吧,如果您手动执行此操作,您如何知道每个新字段应该是单值还是多值?是按名称模式吗(您可以将映射应用于 only some fields )?您是否提前知道例外情况(例如在 shipped films example 中)?你想only keep first/last item吗?
  • 到目前为止,将默认值更改为单值类型效果很好,不再有映射问题,因为所有字段都是以单值类型创建的。对于我现在需要索引的所有字段都是单数类型,但不确定它是否会扩展到数组和复杂模型。不知道它会如何处理,我想我必须测试它才能看到。
猜你喜欢
  • 1970-01-01
  • 2012-01-09
  • 2016-03-06
  • 2018-09-15
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
相关资源
最近更新 更多