2013-08-28 54 views
1

我正面臨着一些關於性能和最佳實踐更好的疑問。在Lucenet.Net中提交和優化文檔的最佳策略?

我的系統會做:

  1. 每文檔中插入和更新,或
  2. 批量文檔中插入

當我想通了(在以前的系統)#2是直截了當:

  • 批量刪除舊文檔並添加新文檔,每個文檔不超過10k個文檔,然後不超過20個字段
  • 提交
  • 優化

但是#1仍然讓我爲難,因爲有些客戶會通過一個文檔添加一個。

在每次插入和更新時,提交和優化時的懲罰是多少?或者我可以忽略它,因爲它每天只發生20次?

Java版本是3.5,.NET版本是3.03

我剛纔看到a blog post並想知道有什麼社會說一下。

+0

對於多久更新的文檔出現在搜索結果中,您有什麼要求?這將告訴我們我們想要提交的頻率。是的,在這一點上,優化是不必要的。 – goalie7960

+0

是你的索引嗎?你的索引是否在內存中?優化每20個文檔是矯枉過正的...如果你真的想在凌晨2點或下班時間優化它。 –

+0

如果服務器故障或應用程序因任何原因崩潰,索引需要保留,因此它將保留在文件系統中。索引將用於文檔搜索。問題是它將主要託管在共享主機上,所以我沒有訪問權限安排例程或腳本來按時優化。 –

回答

3

我看不需要.Optimize()。 Lucene會自動處理段合併,你可以提供自己的邏輯來改變合併的計算方式。當10%的文檔被標記爲刪除時,您可以編寫一些合併掉已刪除文檔的內容。 Lucene的功能不需要將每個已刪除的文檔合併在一起。

當然,你會得到更多的段文件,他們會使用文件描述符,但你有沒有遇到過打開太多文件的問題?我嘗試在Windows服務器安裝上搜索打開文件的最大數量,但答案從幾千個變化到可用內存的限制。