Lucene Solr:没有明确设置默认值的字段的默认值是什么?

Lucene Solr:没有明确设置默认值的字段的默认值是什么?,lucene,solr,Lucene,Solr,我正在使用Solr的schema.xml,我知道我可以使用'default'属性指定默认值,如果没有提供给定字段的值,则将使用该默认值。但是,假设我选择不设置“default”属性,那么Solr将返回哪个默认值 我认为我为给定字段使用的字段类型将有一个默认值,可以使用该值,但我没有成功地找到任何有关此的详细信息。或者,我认为不提供值和不有效地设置默认值就好像特定文档不存在该字段一样 但是,我不确定,我想知道:-) 更新1 在我看来,如果没有设置默认值,也没有为给定字段提供值,Solr只会抛出一个

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

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

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

更新1

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

更新2


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

根据我的经验,如果在加载文档时未指定字段,则Solr在为文档和语句编制索引时将忽略该字段“不提供值和不有效地设置默认值就好像特定文档不存在该字段一样“这是真的。问题是,您只需要指定要为给定文档添加的字段。查看Solr发行版附带的xml exampledocs,查看包含不同字段集的文件示例。

如果在索引过程中不为字段提供值,Solr将使用schema.xml文件中定义的默认值。如果未定义默认值,solr将忽略此字段。如果字段在schema.xml中标记为required,solr将错误地拒绝此文档

例如:

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

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

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

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


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

真奇怪。我试图通过故意省略schema.xml中设置的一个字段来索引文档。索尔然后给了我一个400“糟糕的要求”。一旦我在索引期间为该字段提供了一个值,Solr再次感到高兴。还记得您是否为schema.xml中的每个字段显式设置了“default”属性吗?不,我没有为任何字段设置
default
属性。如果我没有指定一个值,我希望从中得到问题的唯一字段是
uniqueKey
设置中标识的字段。看来你是对的,我的“错误请求”一定是由其他原因引起的。谢谢你的意见。谢谢你的意见。这一切都是有道理的,我很感谢你对它在幕后工作方式的透彻描述!谢谢你的意见!谢谢你!