codecamp

平滑重建索引

前一章讲到有些情况不得不需要重建索引,可以用 XSIndex::clean 立即全部清空所有数据, 然后再把现有数据全部添加到索引数据库中。

但这种方式的缺点对于线上项目是难以容忍的,因此可以选择使用平滑重建方式。它的内部实现 相当于在一个临时区域开辟新库,把所有的添加操作全部更新到新库,直到您完成重建,完成后 再用新库替代旧库用于搜索。

1. 使用重建

在编代码时,把所有的 XSIndex:add 操作都放进 XSIndex::beginRebuild 和 XSIndex::endRebuild 之间即可。写法参考如下:

// 宣布开始重建索引
$index->beginRebuild(); 
// 然后在此开始添加数据...
$index->add($doc);
... 
// 告诉服务器重建完比
$index->endRebuild();

Note: 为确保重建的顺利完成,请在重建时不要对同一个项目开启多个进程、 连接同时交替重建以免发生错乱。

2. 中止重建

虽然我们一再强调,但仍然会在某些意外情况下,导致重建工作意外终止。这时索引库进入一个崩溃状态, 出现DB has been rebuilding 的错误。

这时您可以再次调用 XSIndex::beginRebuild 开始重建索引,但这会丢失之前的所有重建成果。 您还可以在重建前先调用 XSIndex::stopRebuild 直接清除这个错误状态。

Note: 中止重建以及重复开启重建的功能自 1.3.4 版起可用。


清空索引
使用索引缓冲区
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

了解基础对象方法

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }