2013-10-10 58 views
1

索引佔用磁盤空間總量的10%以上時,我想清除SOLR索引。清除應導致刪除最早的文檔,這會使索引空間小於總空間的10%。我怎樣才能找到這些最古老的文件?SOLR - 根據索引大小刪除文檔

我想過找到單個文檔的大小,並以此爲基礎確定要刪除的文檔數量(按日期排序asc和rows = N)。還有其他方法可以解決嗎?謝謝。

回答

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"/> 
--> 

您的確定文件的平均大小和消除基於這樣一組數字戰略聽起來像是一個有效的選項。

+0

我已經添加時間戳字段並能夠得到最古老的N個文檔。你認爲一個更好的主意是從刪除'N'文件(比如N = 1000)開始,並檢查索引是否在磁盤空間的10%以內,而不是文檔大小。如果不是,則將N增加一個因子,然後重複該過程直至小於磁盤空間。我想知道那個因素應該是什麼 – user2869088

0

我想你可以試試這個:

  1. 獲取一個平均文檔大小,使用(averageDocSize = indexSize/totalDocuments)。
  2. 計算10%大小(sizeToDelete = indexSize * 0.1)。
  3. 計算要刪除的文檔計數(n = sizeToDelete/averageDocSize)。
  4. 使用您先前的查詢獲取最早的n個文檔。
  5. 刪除文件

Index size Total number of documents

+0

是的,我最終以這種方式結束了。不管怎麼說,多謝拉。 – user2869088