我对索引的行为和Solr字段的存储属性有点困惑.
例如,如果我在Schema.xml中有以下内容
<field name="test1" type="text" indexed="false"
        stored="false" required="false" />
即使我在其中创建了包含该字段的文档并将值设置为该字段并将文档提交给Solr ,字段test1也不会存储在Solr文档中.因为我有这个stored=false属性,是否意味着该字段的值在Solr中丢失而不是持久存在?
aru*_*run 106
那是正确的.通常,您希望您的字段可以编入索引或存储,也可以两者都存在.如果将两者都设置为false,则该字段将无法在Solr文档中使用(用于搜索或显示).当你想要将两者都设置为假时,请参阅Alexandre对特殊情况的回答.
如前所述这里:indexed=true让搜索(和排序,并且facetable)的字段.对于例如,如果您有一个名为场test1用indexed=true,那么你就可以搜索它想q=test1:foo,这里foo的价值,你正在寻找.如果indexed=false对于字段,test1则该查询将不返回任何结果,即使您在Solr中有一个文档test1的值为foo.
stored=true表示您可以在搜索时检索字段.如果要显式检索查询中字段的值,则将fl在查询中使用param fl=test1(默认值fl=*表示检索所有存储的字段).仅当stored=truefor时test1,将返回该值.否则它将不会被退回.
Ale*_*tch 27
将两者都设置为false的要点是明确跳过该特定字段.
例如,如果您有一个存储/索引dynamicField映射,并且您想忽略一个特定的名称,否则该名称将属于dynamicField的模式.
或者,您可以使用dynamicField忽略来自第三方的具有相同前缀/后缀的整个字段集.例如,Tika将向您发送一大堆您可能只想忽略的元数据字段.请参阅Solr的示例schema.xml中定义的并在solrconfig.xml中使用
在Solr的更高版本中,您也可以使用IgnoreFieldUpdateProcessorFactory(请参阅其他人的完整列表),这将在索引过程中更早地删除这些字段.
在Solr的邮件线程中引用此响应:
“索引”和“存储”是独立的正交属性-您可以使用true和false的四种组合中的任何一种。“索引”用于搜索或查询,即处理查询请求的“查找”部分。搜索/查询/查找完成并选择了一组文档后,“存储”是一组字段,其值可用于显示或随Solr响应返回。
分离的部分原因是Solr / Lucene将输入数据“分析”或转换为更有效的形式,以便更快,更相关地进行搜索/查找。不幸的是,分析/转换后的数据通常不再适合显示和人类消费。换句话说,分析/转换不是双向的/可逆的。设置“ stored = true”可确保可以原始格式检索原始数据。