Solr指数vs存储

use*_*449 59 solr solr4

我对索引的行为和Solr字段的存储属性有点困惑.

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

<field name="test1" type="text" indexed="false"
        stored="false" required="false" />
Run Code Online (Sandbox Code Playgroud)

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

aru*_*run 106

那是正确的.通常,您希望您的字段可以编入索引或存储,也可以两者都存在.如果将两者都设置为false,则该字段将无法在Solr文档中使用(用于搜索或显示).当你想要将两者都设置为假时,请参阅Alexandre对特殊​​情况的回答.

如前所述这里:indexed=true让搜索(和排序,并且facetable)的字段.对于例如,如果您有一个名为场test1indexed=true,那么你就可以搜索它想q=test1:foo,这里foo的价值,你正在寻找.如果indexed=false对于字段,test1则该查询将不返回任何结果,即使您在Solr中有一个文档test1的值为foo.

stored=true表示您可以在搜索时检索字段.如果要显式检索查询中字段的值,则将fl在查询中使用param fl=test1(默认值fl=*表示检索所有存储的字段).仅当stored=truefor时test1,将返回该值.否则它将不会被退回.

  • 我怎么能喜欢你的答案?:) (2认同)

Ale*_*tch 27

将两者都设置为false的要点是明确跳过该特定字段.

例如,如果您有一个存储/索引dynamicField映射,并且您想忽略一个特定的名称,否则该名称将属于dynamicField的模式.

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

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

  • 如果你逐行阅读示例配置,你会学到许多奇怪而美妙的东西. (4认同)
  • [Solr 文档](https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents#UpdatingPartsofDocuments-In-PlaceUpdates) 允许就地更新都设置为 false 的字段。有什么意义吗?更新不可搜索和不可存储的字段有什么实际意义? (2认同)
  • 因为该特定示例启用了 docValues,它再次以不同的方式存储内容。即使存储设置为 false,您也可以返回 docValue。这是一个新的 Solr 功能 (6+),在回答上述问题时不存在。 (2认同)

Pal*_*Dot 7

在Solr的邮件线程中引用响应:

“索引”和“存储”是独立的正交属性-您可以使用true和false的四种组合中的任何一种。“索引”用于搜索或查询,即处理查询请求的“查找”部分。搜索/查询/查找完成并选择了一组文档后,“存储”是一组字段,其值可用于显示或随Solr响应返回。

分离的部分原因是Solr / Lucene将输入数据“分析”或转换为更有效的形式,以便更快,更相关地进行搜索/查找。不幸的是,分析/转换后的数据通常不再适合显示和人类消费。换句话说,分析/转换不是双向的/可逆的。设置“ stored = true”可确保可以原始格式检索原始数据。

  • _ **“分析/转换后的数据通常不再适合显示和供人类使用...” ** _我想知道为什么如果将字段的值设置为index =“ true”,但为什么我们不能显示该字段的值,但是存储的字段为false ”。您已经清除了。谢谢! (2认同)