【问题标题】:SOLR Difference between indexed=true and stored=trueSOLR indexed=true 和 stored=true 之间的区别
【发布时间】:2015-03-02 09:23:46
【问题描述】:

在 SOLR 中,stored=trueindexed=true 有什么区别。我知道stored=true 存储字段的实际值而不修改它,indexed=true 存储字段的修改值以用于计算目的。我想知道,它会影响性能到什么程度。与stored =falseindexed=true 相比,stored=trueindexed=true 的组合是否会降低持久性和检索的性能?

【问题讨论】:

    标签: java solr


    【解决方案1】:

    indexed = true 如果您想在该字段上进行搜索,则需要。如果某个字段未编入索引,则您无法从该字段中找到值/术语。 如果indexed = true,您的分析器链会遍历该字段的数据。

    如果您需要从索引中读取字段的值/内容,则需要stored = true。例如,如果您喜欢使用突出显示功能,或者如果您喜欢将 solr 用作数据库,而不仅仅是作为搜索索引。 ifstored = true表示:只需存储原始内容,如果需要,输出原始内容。

    我想知道,它会影响性能到什么程度。

    内容(存储)和索引放在不同的文件中。所以 solr 不需要在搜索时遍历内容文件,只是因为 storage 是真的。

    存储数据需要一些时间,尤其是在数据很大的情况下。在检索方面,这取决于您在“fl”中输入的内容。如果您不使用“fl”检索该字段,则不会产生阅读成本。

    但是如果该字段被存储,那么 solr 能够打印结果列表中的内容(取决于您的 solr 配置)。这意味着,您的结果列表可能会更大(取决于您的内容/字段大小)。如果 solr 也必须发送存储字段的内容,那么构建列表并将列表传输到客户端可能会更慢。

    执行搜索的时间将相同。但是请求所需的整个时间是添加了几件事:搜索、构建结果列表、将列表传输到客户端等。因此,将所有字段存储为输出所有内容到结果列表中可能会减慢您的速度solr 请求,但不会影响查询时间。

    【讨论】:

    • 您能提出其他提高性能的方法吗?就我而言,持久性和检索变得缓慢,并且我们配置了 1 个分片和 3 个副本,索引用于分页目的(如排序、分组等)。我们正在考虑增加 OpenSearcher 的数量,但我们了解到这会在 RAM 上产生开销。我们还在批量作业和实时中进行了大量的硬提交。我们考虑使用软提交,但我们需要“完全实时”响应而不是“近乎实时”响应。
    • 读到这里,看来硬提交是性能问题的原因。一个选项是在导入后使用optimize=false 选项提交数据。但是每次更新都会使您的索引碎片化,因此您必须每小时/每天在特定的时间间隔内运行一次优化。您可以使用<mergeFactor> 选项。有一点是,大多数导入/提交会导致新的搜索处理程序。在这种情况下(部分)缓存丢失 = 性能不佳。如果你可以从德语翻译阅读这个php-solr-lucene.blogspot.de/2012/09/…
    • 优化实际上设置为默认值,即“10”。如果我们增加分片的数量呢?性能不会有影响吗?
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 2015-01-06
    • 2016-12-02
    • 2012-08-23
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多