2009-10-16 53 views
3

從Lucene索引中刪除舊文檔的慣用方法是什麼?如何從Lucene/Lucene.NET中刪除舊文檔

我對所有文件的日期字段(YYYYMMDDHHMMSS),我想刪除任何東西比日齡(例如)以上。

我應該進行過濾的搜索或通過的IndexReader的文件列舉?

我敢肯定,問題是無論哪個相同的Lucene的平臺上運行。

謝謝!

回答

3

搜索年月日*將正常運行當前日期存儲爲文本字符串。一旦你有結果,你可以使用IndexReader.delete刪除你不感興趣的文檔。在我看來,這是實現這一目標的最佳方式。

+0

我用這種方法看到的一個問題是,當有超過1024箇舊文檔時,我會得到一個「TooManyClauses」異常。 –

+0

這真的取決於你的實現。我需要知道具體細節,但作爲一般規則,您可以刪除這些搜索警告,因爲它們只是維護(通過設置更高的最大子句數),或者進行更具體的搜索(YYMMddhh *等)。再次,都取決於你的環境和實施。 – synhershko

+0

我最終通過使用MatchAllDocsQuery和RangeFilter對此進行了輕微的變化。似乎到目前爲止工作正常... –

2

您可以嘗試使用Lucene的低級API。

獲取期限枚舉從與「YYYY」一詞指數。迭代術語統計員以獲得術語。如果該術語的文本不與當前日期(或上一個日期)相關,請使用該術語調用IndexReader.deleteDocuments(術語)。

既然你不使用查詢對象,你不會得到搜索相關的異常。