索尔指数vs存储

我有点困惑索引和存储的属性Solr字段的行为是什么。

例如,如果我在Schema.xml中有以下内容

<field name="test1" type="text" indexed="false" stored="false" required="false" /> 

即使我创build了一个包含该字段的文档,并将值设置为该字段并将文档提交给Solr,字段test1是否不会存储在Solr文档中? 由于我有stored=false属性,这是否意味着该字段的值在Solr中丢失,而不是持久?

感谢您提前澄清!

那是对的。 通常你会希望你的领域是索引或存储或两者兼而有之。 如果您将两者设置为false,那么您的Solr文档中将无法使用该字段(用于search或显示)。 请参阅亚历山大(Alexandre)关于特殊情况的回答,以便将两者都设为假。

如此处所述: indexed=true使得字段可search(并且可sorting且可面向)。 例如,如果您有一个名为test1且字段名为indexed=true的字段,则可以像q=test1:foo那样进行search,其中foo是您正在search的值。 如果字段test1 indexed=false ,则即使在Solr中有一个文档, test1的值为foo ,该查询也不会返回结果。

stored=true表示您可以在search时检索该字段。 如果你想显式地检索你的查询中的字段的值,你将在你的查询中使用fl参数,如fl=test1 (默认为fl=*表示检索所有存储的字段)。 只有在test1 stored=true的情况下,才会返回该值。 否则它不会被退回。

将这两个设置为false的主要观点是显式跳过该特定字段。

例如,如果你有一个存储/索引的dynamicField映射,并且你想忽略一个特殊的名字,否则它将被置于dynamicField的模式下。

或者,你可以使用dynamicField忽略来自第三方的具有相同前缀/后缀的整个字段集合。 例如,Tika会向您发送一大堆您可能会忽略的元数据字段。 请参阅Solr的示例schema.xml中定义的并在solrconfig.xml中使用

在Solr的更高版本中,您也可以使用IgnoreFieldUpdateProcessorFactory (请参阅完整列表 ),这将在索引过程中更早地摆脱这些字段。