Solr索引与存储

Solr索引与存储,solr,solr4,Solr,Solr4,对于Solr字段的索引和存储属性的行为,我有点困惑 例如,如果Schema.xml中有以下内容 <field name="test1" type="text" indexed="false" stored="false" required="false" /> 字段test1是否不会存储在Solr文档中,即使我创建了一个包含该字段的文档,并为该字段设置了一个值,然后将文档提交给Solr。由于我有stored=false属性,这是否意味着字段的值在Solr中丢失而

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

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

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


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

这是正确的。通常,您希望对字段进行索引或存储,或者两者都进行索引或存储。如果将两者都设置为false,则该字段在Solr文档中将不可用(用于搜索或显示)。请参阅Alexandre的答案,了解您希望将两者都设置为false的特殊情况

如上所述:
indexed=true
使字段可搜索(并可排序和分面)。例如,如果您有一个名为
test1
index=true
的字段,那么您可以像
q=test1:foo
那样搜索它,其中
foo
是您要搜索的值。如果字段
test1
index=false
,则该查询将不会返回任何结果,即使您在Solr中有一个
test1
值为
foo
的文档


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

将两者都设置为false的主要目的是显式跳过该特定字段

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

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

在Solr的更高版本中,您也可以使用(其他请参见),这将在索引过程的更早阶段删除这些字段。

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

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

分离的部分原因是Solr/Lucene“分析”或 将输入数据转换为更高效的形式,以实现更快、更高的速度 相关搜索/查找。不幸的是,分析/转换的数据是 通常不再适合展示和人类消费。换句话说 分析/转换不是双向/可逆的。背景 “stored=true”保证原始数据可以在其 原始形式


如果两者都是假的,你就失去了该领域的数据。如果indexed true,则可以搜索数据,但无法显示。如果将“存储”设置为“真”,您将无法搜索该字段,但可以显示该字段(在这种情况下,您可以编写copyfield规则将信息从该字段复制到默认的可搜索字段)。两者都设置为true->您可以搜索和显示。

index=true表示此字段可用于搜索。 例如,如果我按如下方式设置项目字段,并尝试在搜索中执行该字段

<field name="item" type="text_general" uninvertible="true" indexed="false" stored="true"/>

fq=项目:“网球”将标记错误

stored=true表示可以在查询后显示的字段列表中检索此字段。 例如,如果项目字段定义如下

<field name="item" type="text_general" uninvertible="true" indexed="true" stored="false"/>

您将能够正确地搜索
fq=item:“网球”
,但它不会返回结果中的item字段


对于索引和存储都设置为false的字段,您没有意识到这个用例。如果您逐行阅读示例配置,你学到了很多奇怪而奇妙的东西。如果我只存储索引而不存储字段值,那么它会对性能产生影响,因为我总是可以将字段值存储在其他数据库中,并在Solr给我搜索结果后从那里返回数据。它是否能帮助我减少索引文件的大小并提高性能,从而允许对同时设置为false的字段进行就地更新。这有什么意义吗?更新不可搜索和不可存储的字段有什么实际意义?因为该特定示例启用了docValues,它再次以不同的方式存储内容。即使存储设置为false,也可以返回docValue。这是一个新的Solr功能(6+)在回答上述问题时不存在。我如何才能喜欢你的答案?:)我认为你不需要索引来进行排序,刻面。您可以设置docValues=true。“分析/转换的数据通常不再适合显示和人类消费…”我想知道,如果字段设置为index=“true”,但存储为=“false”,为什么我们不能显示字段的值。你已经把它清理干净了。非常感谢。这与现有答案有何不同?