PHP-sphinx如何及时清理违禁信息
由于我的sphinx索引比较大,每次创建都需要一两个小时,现在网站有人发垃圾信息和违禁信息。我已经在mysql中将其删除了,但是要清理sphinx索引中的违禁信息,必须重建索引,这样处理起来很花费时间,而且会造成线上数据不能用的情况,该怎么办呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
信息中应该有一个状态标记字段吧。比如:1代表正常状态,-1代表违禁状态。只需要使用sphinx的UpdateAttributes去更新索引中的记录就可以了。在前端查询的时候使用SetFilter只过滤状态为1的记录即可。
我的测试数据库结构是
id:自增id
title:标题
content:内容
status:状态默认为1代表此条信息正常,0标识是违禁信息
设置索引中记录的代码如下
require('sphinxapi.php');
$sc = new SphinxClient();
$sc->SetServer('127.0.0.1', 9312);
$sc->SetConnectTimeout(1);
$sc->UpdateAttributes("news", array("status"), array(12=>array(0)));
读取搜索中记录代码如下
require('sphinxapi.php');
$sc = new SphinxClient();
$sc->SetServer('127.0.0.1', 9312);
$sc->SetConnectTimeout(1);
$sc->SetMatchMode(SPH_MATCH_ALL);
$sc->SetFilter('status', array(1));
$sphinxRs = $sc->Query('手枪', 'news');
print_r($sphinxRs);
经测试,可以做到实时处理违禁信息的能力。
处理违禁信息的流程是这样的。
1.用户举报或者自查发现违禁信息;
2.找到信息的id;
3.程序批量更新mysql表中记录状态的同事,对sphinx做UpdateAttributes操作。
4.前台显示的时候通过SetFilter只筛选状态为1的记录即可。
因为,索引会定期重建,一天或者两天甚至三个星期,由于重建索引直接读取的mysql数据自然会将status=0的记录排除掉。这样既实现了及时替换有保证的日常索引重建不会出现违禁信息。