2015-03-03 54 views
0

我有一個Azure WebJob和一個接收要處理的項目的隊列。每秒可以處理很多項目。隊列同時處理20個項目。lucene.net - 如何非常頻繁地更新索引?

我想索引的項目與Lucene .net。

啓動一個IndexWriter,調用Optimize()並將其丟棄到每個碰到隊列的項上需要很多時間。感覺我做錯了。

我希望儘快爲搜索做好準備。

可以爲多個線程使用一個IndexWriter嗎?

我是否需要調用Optimize()還是可以永遠不要調用它,或者在每天運行一次的單獨進程上調用它(例如)?

如果我只有一個IndexWriter並且從不處置它(程序退出時除外),我是否會將新項目粘在緩衝區上?

在處置IndexWriter之前,可以使用IndexWriter添加的新項目進行搜索嗎?

謝謝。

回答

3
  1. IndexWriter是線程安全的,從不同的線程調用是安全的。
  2. 可以永遠不要調用優化。 (如果默認不適用於您,可以編寫自定義合併策略。)
  3. 您將通過調用commit將所有文檔刷新到磁盤。沒有必要處置你的作家。改用它。
  4. 一旦讀者看到它們,文檔就可以被搜索到。在您提交作者並重新打開您的閱讀器後會發生這種情況。你可以在他們通過從IndexWriter.OpenReader抓取閱讀器使用近實時(NRT)搜索來進行閱讀之前閱讀它們。