当我们同步数据到xunsearch中时,由于一次性将所有数据查询出来比较大,添加到一部分,xunsearch莫名其妙断开关闭。查询了原因也没找到问题,后来经过多次添加,才发现由于同步数据立即传送到服务器过多过快,导致负荷严重,断开连接,查看xunsearh文档我们可以使用索引缓冲区 来避免这种异常:
对于大量索引更新操作时,请使用以下方式开启缓冲区进行操作,缓冲区的默认 大小为 4MB
,如需修改请传入数字作为 XSIndex::openBuffer 的参数。
public static function save($data,$file = 'demo',$tag = 'add'){
try {
$xs = new XS($file);
$xindex = $xs->index;
// 开启缓冲区
$xindex->openBuffer();
// $xindex->setTokenizer(new XSTokenizerScws);
foreach ($data as $index => $value ){
$doc = new XSDocument;
$doc->setFields($value);
if ($tag == 'add'){
$xindex->add($doc);
}elseif ($tag == 'update'){
$xindex->update($doc);
}else{
$xindex->del($tag);
}
}
// 关闭缓冲区
$xindex->closeBuffer();
// 强制刷新当前索引列表数据
return $xindex->flushIndex();
}catch (Exception $e){
echo "异常 >> " . $e;
return false;
}
}
然后我们在批量添加就不会出现异常