2010-09-21 42 views
1

這就是我打算做的,我會很感激任何人的輸入:ASP.NET搜索索引建設戰略

我已經建立了在Asp.net MVC的論壇,現在要添加Lucene.Net進行搜索。我的計劃是每隔5-10分鐘運行一次索引構建器線程,通過對每個討論所做的更改來更新搜索索引。

它的工作方式是保持搜索索引中最後一次運行索引構建器線程的日期和時間。然後,在每次執行索引構建器時,我都會從搜索中讀取此日期,然後索引自該日期和時間以來發生的任何更改。一旦我完成,然後更新最後一次運行條目。

這樣好嗎?有人可以建議一個更好的方式來增加索引在論壇應用程序的變化?

回答

1

您將需要維護一個計時器......並且如果索引操作在5分鐘內沒有停止,另一個人將開始索引相同的更改,因此您還必須檢查此類情況。

一個稍微好一點的方法是簡單地使用一個保持活躍的專用索引線程。此線程將從上次運行中獲取更改並按照您所描述的處理它們,但不會等待。索引操作結束後,它會馬上重新啓動,並隨着項目的不斷索引。

如果沒有更多項目要索引,則線程將休眠5分鐘(然後重新檢查當它醒來時再次改變)。

通過這種方式,您可以確保一次只有一個客戶端修改索引。如果您以某種方式管理定時器失誤,或者您突然收到大量帖子,並且會隨着論壇的增長而擴展,而無需現在或時間調整索引間隔,它將永遠不會佔用大量的CPU。

雖然您需要監控線程的健康狀況。

+0

感謝您的回覆。我使用Quartz.net來縮短作業在後臺運行。我想我可以在Quartz.net中解僱一個從不退出的工作。你對此有何看法? – Roman 2010-09-21 15:22:45

+0

@Am聽起來不錯:)......之前沒有使用過Quartz,但我認爲它可以監視作業的健康狀況,並在崩潰時重新啓動它?另一件事是你可能想保留一些簡單的異常日誌以防萬一。 – chakrit 2010-09-21 15:27:06

+0

我特別選擇了quartz.net,因爲它允許監聽我用於記錄的不同事件(即開始,結束,異常等)。然後,我可以簡單地檢查日誌並查看哪個後臺線程崩潰。 – Roman 2010-09-21 15:28:57