SOLR中indexed=true和stored=true的区别

5
在SOLR中,stored=trueindexed=true有什么区别?我知道stored=true会存储字段的实际值而不对其进行修改,indexed=true会存储字段的修改值以进行计算。我想知道它们对性能的影响程度。当与stored=falseindexed=true相比时,stored=trueindexed=true的组合是否会降低持久性和检索的性能?
1个回答

13
如果您想要在该字段上进行搜索,则需要使用indexed = true。如果字段未被索引,那么您无法从该字段中找到值/术语。
如果您需要从索引中读取字段的值/内容,例如使用高亮功能或将Solr用作数据库而不仅仅是搜索索引,则需要使用stored = true。如果 stored = true,则表示: 仅存储原始内容并在需要时输出原始内容。
内容(stored)和索引位于不同的文件中。因此,在搜索时,Solr不需要遍历内容文件,只需因为stored为true。
将数据存储起来需要一些时间,特别是如果数据量很大。在检索方面,这取决于您在'fl'中放置了什么。如果没有使用'fl'检索该字段,则不会产生读取它的成本。
但是,如果该字段已存储,则Solr能够在结果列表中打印出内容(取决于您的Solr配置)。这意味着,您的结果列表可能会更大(取决于您内容/字段大小)。如果Solr还必须发送存储字段的内容,则构建列表并将列表传输到客户端可能会变慢。
执行搜索的时间将保持不变。但是,请求所需的整个时间是多个因素的相加:搜索,构建结果列表,将列表传输到客户端等。因此,存储所有字段并将所有内容输出到结果列表中可能会使Solr请求变慢,但不会影响查询时间。

你能提供其他方法来提高性能吗?在我的情况下,持久化和检索变得很慢,我们的配置是1个分片和3个副本,索引用于分页目的(如排序、分组等)。我们考虑增加OpenSearchers的数量,但我们读到这会在RAM上产生负担。我们也在批处理作业和实时处理中进行了大量的硬提交。我们考虑使用软提交,但我们需要“完全实时”的响应,而不是“近乎实时”的响应。 - Tanveer Dayan
阅读此内容,看起来是硬提交导致性能问题的原因。一种选择是在导入后使用 optimize=false 选项提交数据。但每次更新都会分段索引,因此您必须定期在特定时间间隔内运行优化,例如每小时/每天一次。您还可以尝试调整 <mergeFactor> ​​选项。其中一点是,通常导入/提交会导致新的搜索处理程序。在这种情况下,缓存部分丢失 = 性能差。如果您可以阅读德语,请参阅 http://php-solr-lucene.blogspot.de/2012/09/relatime-suche-vs-performance.html - The Bndr
优化实际上被设置为默认值,即“10”。如果我们增加 Shard 的数量,性能会受到影响吗? - Tanveer Dayan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接