【问题标题】:Solr: what are the default values for fields which does not have a default value explicitly set?Solr:没有明确设置默认值的字段的默认值是什么?
【发布时间】:2011-12-28 22:38:07
【问题描述】:

我正在使用 Solr 的 schema.xml,并且我知道我可以使用“默认”属性来指定一个默认值,如果没有提供给定字段的值,则使用该默认值。但是,假设我选择不设置“默认”属性,那么 Solr 将回退到哪个默认值?

我认为我用于给定字段的字段类型将具有一个默认值,但我没有成功找到有关此的任何详细信息。或者,我认为不提供值并且不有效地设置默认值就像特定文档不存在该字段一样。

但是,我不确定,我想知道 :-)

更新 1

据我所知,如果没有设置默认值并且没有为给定字段提供值,Solr 只会抛出错误并返回错误 400“错误请求”。换句话说,Solr 似乎不会应用任何“回退”默认值,以防在 schema.xml 中未提供任何值且未设置默认值。

更新 2

我上面的更新似乎是错误的。如果没有为某个字段提供值并且没有为该字段设置默认值,那么 Solr 只会将该字段视为该特定文档不存在该字段。当然,如果该字段是必需的,则此行为不适用。

【问题讨论】:

    标签: lucene solr


    【解决方案1】:

    如果您在索引期间不为字段提供值,则 solr 将使用 schema.xml 文件中定义的默认值。如果未定义默认值,则 solr 会忽略此字段。如果字段在 schema.xml 中标记为必填 - solr 将拒绝此文档并出现错误。

    例子:

    <field name="comments" type="text" indexed="true" stored="true" required="true"/>
    <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" />
    

    【讨论】:

    • 感谢您的意见!欣赏!
    【解决方案2】:

    根据我的经验,如果您在加载文档时没有指定字段,那么 Solr 在索引文档时将忽略该字段,并且您的声明“不提供值并且不有效设置默认值将就好像该字段特定文档不存在”是真的。问题是您只需要指定要为给定文档添加的字段。查看 Solr 发行版附带的 xml 示例文档,了解一些包含不同字段集的文件示例。

    【讨论】:

    • 这很奇怪。我试图通过有意省略在 schema.xml 中设置的字段之一来索引文档。 Solr 然后给了我一个 400“错误请求”。一旦我在索引 Solr 期间为该字段提供了一个值,我再次感到高兴。你还记得你是否为 schema.xml 中的每个字段明确设置了“默认”属性吗?
    • 不,我没有为我的任何字段设置default 属性。如果我没有指定一个值,我希望得到的唯一字段是uniqueKey 设置中标识的字段。
    • 看来你是对的,我的“错误请求”一定是由其他原因引起的。感谢您的意见。
    【解决方案3】:

    虽然您在名为 schema.xml 的文件中定义了字段,但 Solr 文档实际上是无计划的。这意味着内部 Solr 引擎 (Lucene) 没有每个文档必须具有的任何字段定义。使用 Lucene,您可以轻松地将字段 myCompletelyNewField 添加到任何文档,而不会影响其他文档。

    那么,schema.xml 的原因是什么? Solr/Lucene 中的每个字段都有几个属性,其中最著名的是indexedstored 属性。此外,所有字段都必须绑定到某些内部数据类型和处理单元。例如,id 字段必须存储为字符串,description 字段必须使用一些英文分析器进行分析,使用停用词过滤器等进行清理。将add 请求中的所有这些信息传递给 Solr 非常不方便。由于您知道将使用哪些字段并有权访问 Solr 服务器(至少在大多数情况下),因此将所有这些信息移动到单独的文件中要容易得多。这个文件是schema.xml

    所以,现在您必须了解schema.xml 定义了允许 的字段,而不是文档中必须存在的字段。 requireddefault 等附加修饰符只是在将文档添加到索引之前提供附加服务。 IE。 required 将强制 Solr 的“前端”检查新文档中是否存在指定字段。如果是,它会进一步传递文档,否则它会拒绝新文档。 default 导致相同的检查,但如果字段不存在,它将使用默认值添加它并进一步传递文档。

    至于您的“错误请求”错误,我猜您在其他地方有错误,例如您在不允许的情况下添加空字段(字段存在,但其值为“”),或为该字段使用不正确的值,或添加了一些与实际添加的字段相矛盾的其他修饰符。

    【讨论】:

    • 感谢您的意见。这一切都说得通,感谢您对幕后工作原理的详尽描述!
    猜你喜欢
    • 2023-03-11
    • 2019-02-04
    • 2020-11-20
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2017-12-08
    相关资源
    最近更新 更多