索尔指数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 (请参阅完整列表 ),这将在索引过程中更早地摆脱这些字段。