2012-11-03 104 views
1

我有一個Web應用程序,它使用Lucene.Net和NHibernate.Search作爲全文搜索引擎。 NHibernate.Search的設置使得無論何時在數據庫中完成更改,它都會傳播到Lucene索引。Lucene.net&NHibernate搜索併發問題

Web應用程序正在使用4個工作進程運行。首先,這是一個問題嗎?我注意到Lucene索引不是與數據庫同步的100%。 Lucene索引中沒有顯示數據庫的一些更改。但是,當我手動嘗試重新索引數據時,這工作正常。

在多進程環境中使用Lucene.Net是否存在任何併發性問題?

+0

您還應該記住,IndexReader只能在索引打開時才存在 - 如果索引在打開IndexReader後更新,您將不會看到這些新文檔。 –

+0

@MarkLeightonFisher該問題是由於'LockObtainTimeouts' - 首先我關閉了NHibernate記錄器,因此無法檢測到它。問題是,當這種超時被觸發時,該項目不被保存。我仍然需要找出所有這些超時的確切原因。 –

+0

你有沒有與這個卡爾的運氣? – coalvilledave

回答

0

這聽起來像一個開放的IndexWriter在索引目錄上保持鎖定的問題。一個工作進程會鎖定其他進程的索引。

只要每個索引只有一個writer,Lucene.Net就可以用於多進程環境。不同的目錄實現以不同的方式執行此操作,通常涉及名爲write.lock的文件。

一個常見的解決方案是有一個單獨的搜索過程來處理索引和搜索。

+0

從那時起,我已經開始使用Lucene上的文檔數據庫來進行搜索,因爲搜索功能被提取到外部進程中。由此,我瞭解到這是Lucene僅支持每個索引一個編寫器的難題。 –