PHP-sphinx如何及时清理违禁信息

发布于 2016-11-04 04:54:59 字数 130 浏览 1353 评论 1

由于我的sphinx索引比较大,每次创建都需要一两个小时,现在网站有人发垃圾信息和违禁信息。我已经在mysql中将其删除了,但是要清理sphinx索引中的违禁信息,必须重建索引,这样处理起来很花费时间,而且会造成线上数据不能用的情况,该怎么办呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜柠檬 2017-03-16 23:54:02

信息中应该有一个状态标记字段吧。比如: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的记录排除掉。这样既实现了及时替换有保证的日常索引重建不会出现违禁信息。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文