Solr索引与存储
对于Solr字段的索引和存储属性的行为,我有点困惑 例如,如果Schema.xml中有以下内容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中丢失而
<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”,为什么我们不能显示字段的值。你已经把它清理干净了。非常感谢。这与现有答案有何不同?