【问题标题】:SOLR - delete documents depending on index sizeSOLR - 根据索引大小删除文档
【发布时间】:2013-10-10 23:27:39
【问题描述】:

每当索引占用超过 10% 的总磁盘空间时,我想清除 SOLR 索引。清除应导致删除最旧的文档,这将使索引空间小于总空间的 10%。我怎样才能找到这些最古老的文件?

我想找到单个文档的大小,并以此为基础来确定要删除多少个文档(按日期 asc 和行 = N 排序)。还有其他方法吗?谢谢。

【问题讨论】:

    标签: solr


    【解决方案1】:

    当您为文档编制索引时,您可以启用一个时间戳字段,该字段将记录文档添加到索引中的日期和时间。然后您可以查询时间戳字段以确定最旧的文档。这是一个曾经包含在 Solr 示例 schema.xml 中的示例,但在最近的版本中被删除了。

     <!-- Uncommenting the following will create a "timestamp" field using
        a default value of "NOW" to indicate when each document was indexed.
     -->
     <!--
      <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
     -->
    

    您确定文档平均大小并基于此删除一组数字的策略听起来是一个有效的选项。

    【讨论】:

    • 我已经添加了时间戳字段,并且能够获取最旧的 N 个文档。除了文档大小,您认为更好的主意是从删除“N”个文档(比如 N=1000)开始并检查索引是否在磁盘空间的 10% 以内。如果不是,则将 N 增加一个因子,然后重复该过程,直到它小于磁盘空间。我想知道那个因素应该是什么
    【解决方案2】:

    我想你可以试试这个:

    1. 使用 (averageDocSize = indexSize/totalDocuments) 获取平均文档大小
    2. 计算 10% 的大小 (sizeToDelete = indexSize * 0.1)。
    3. 计算要删除的文档数 (n = sizeToDelete/averageDocSize)。
    4. 使用您之前的查询来获取最早的 n 个文档。
    5. 删除文档

    Index size Total number of documents

    【讨论】:

    • 是的,我最终还是这样做了。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2012-09-25
    • 2016-06-08
    • 2017-03-05
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多