2013-05-21 144 views
0

我之前沒有想過這個問題,因爲我在一臺Windows Server 2008上託管應用程序,lucene.net將索引存儲在本地硬盤上。Lucene.net服務器場/多個服務器

(基本上,每一次,當用戶訊息或回覆的東西,我更新索引,因此搜索可以返回最新的結果。不知道這是做到這一點的最好辦法)

現在,我們需要在前面安裝一個負載平衡器的網絡服務器,我顯然不能讓每個服務器的索引都取決於負載平衡器指向的位置,因爲它們會不同步。

對我來說,一個選擇是連接兩臺服務器並將它們映射到存儲索引的共享服務器,但這是一個建議的解決方案嗎?

你們如何管理服務器場環境中lucene.net的解析和索引?

非常感謝

回答

0

您可以通過創建,提供的功能,就像一個WCF或休息服務的服務單獨從您的Web應用程序的Lucene索引引擎。

您也可以使用已有的搜索服務器。

http://lucene.apache.org/solr/

http://www.elasticsearch.org/

+0

thankd @Jf。我對solr並不熟悉,但是通過將lucene索引引擎從Web應用程序中取出,這意味着我必須按設定的時間間隔在其他位置安排索引函數,並且每次都瀏覽整個數據庫?我不確定現在對我們是否可行,因爲我們需要儘快取得成果。 在1張表中,我們有10萬條記錄。我確信lucene沒有索引它的問題,但是爲了將它們從數據庫中提取出來以便lucene解析需要時間。 – Liming

+0

除非您的大部分記錄始終在變化,您可以像記錄每分鐘一樣記錄時間並查詢數據庫,如果這足夠滿足您的實時需求。 –

0

我們保持我們的負載平衡服務器同步的方式,每一個都有自己的Lucene的副本,是有一些其他的服務器上的任務,運行每5分鐘指揮每個負載平衡服務器將其索引更新爲某個時間戳。

例如,該任務向所有負載平衡服務器發送時間戳爲'12/1/2013 12:35:02.423'(該任務通過查詢字符串將時間戳提交到每個負載平衡網站上的網頁),那麼每個服務器都使用該時間戳來查詢數據庫,以獲取自上次更新到該時間戳以來發生的所有更新,並更新其本地Lucene索引。

每臺服務器還將時間戳存儲在數據庫中,以便知道每臺服務器上次更新的時間。因此,如果服務器脫機,當它恢復聯機狀態時,下次收到時間戳命令時,它將抓取它在脫機時錯過的所有更新。