2012-03-13 158 views
1

我們在mongo中有數百萬個文件,我們正在尋找索引索引。顯然,當我們這樣做的時候,我們第一次需要索引所有的文檔。solr索引策略

但之後,我們應該只需要索引文件,因爲他們改變。做這個的最好方式是什麼?我們應該調用addDocument,然後在cron調用commit()中? addDocument vs commit vs optimize do(我正在使用Apache_Solr_Service)

回答

2

如果您使用Solr 3.x,您可以將forget the optimize合併到一個大的網段中。提交使更改對新的IndexReader可見;它很貴,我不會爲你添加的每個文檔調用它。而不是通過cron調用它,我會使用solrconfig.xml中的autocommit。您可以調整該值,具體取決於在搜索時可以等待多長時間才能獲取新文檔。

+0

如何確定文檔是否需要編制索引?你會在mongo文件needs_index上設置一個標誌嗎? – 2012-03-14 13:29:55

+0

@ChrisMuench耶,似乎是一個好主意。 – javanna 2012-03-14 14:01:05

0

文檔實際上不會被添加到索引,直到您執行commit() - 它可以被回滾。優化()將(表面上;我沒有特別好運氣)減小索引的大小(已刪除的文檔仍佔用空間,除非索引被優化)。

0

如果爲數據庫設置了自動提交,那麼當自動提交時間間隔已過時,可以確保通過更新添加到數據庫的任何文檔都已提交。我已經使用了5分鐘的時間間隔,即使在5分鐘內發生了幾千次更新,它也能正常工作。完整的重新索引完成後,我會等待5分鐘,然後告訴人們它已完成。事實上,當人們詢問更新進入數據庫的速度有多快時,我會告訴他們我們每分鐘都會調查一次更改,但是有變量(例如突然的大批量更改),最好不要指望更新內容5或6分鐘。到目前爲止,沒有人真的聲稱企業需要更新更快的速度。

這是一個350,000的記錄數據庫總計大約10G的RAM。