平滑重建索引

2019-08-14 14:03 更新

前一章講到有些情況不得不需要重建索引,可以用 XSIndex::clean 立即全部清空所有數(shù)據(jù), 然后再把現(xiàn)有數(shù)據(jù)全部添加到索引數(shù)據(jù)庫(kù)中。

但這種方式的缺點(diǎn)對(duì)于線上項(xiàng)目是難以容忍的,因此可以選擇使用平滑重建方式。它的內(nèi)部實(shí)現(xiàn) 相當(dāng)于在一個(gè)臨時(shí)區(qū)域開辟新庫(kù),把所有的添加操作全部更新到新庫(kù),直到您完成重建,完成后 再用新庫(kù)替代舊庫(kù)用于搜索。

1. 使用重建

在編代碼時(shí),把所有的 XSIndex:add 操作都放進(jìn) XSIndex::beginRebuild 和 XSIndex::endRebuild 之間即可。寫法參考如下:

// 宣布開始重建索引
$index->beginRebuild(); 
// 然后在此開始添加數(shù)據(jù)...
$index->add($doc);
... 
// 告訴服務(wù)器重建完比
$index->endRebuild();

Note: 為確保重建的順利完成,請(qǐng)?jiān)谥亟〞r(shí)不要對(duì)同一個(gè)項(xiàng)目開啟多個(gè)進(jìn)程、 連接同時(shí)交替重建以免發(fā)生錯(cuò)亂。

2. 中止重建

雖然我們一再?gòu)?qiáng)調(diào),但仍然會(huì)在某些意外情況下,導(dǎo)致重建工作意外終止。這時(shí)索引庫(kù)進(jìn)入一個(gè)崩潰狀態(tài), 出現(xiàn)DB has been rebuilding 的錯(cuò)誤。

這時(shí)您可以再次調(diào)用 XSIndex::beginRebuild 開始重建索引,但這會(huì)丟失之前的所有重建成果。 您還可以在重建前先調(diào)用 XSIndex::stopRebuild 直接清除這個(gè)錯(cuò)誤狀態(tài)。

Note: 中止重建以及重復(fù)開啟重建的功能自 1.3.4 版起可用。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)