首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL检测垃圾邮件发送者

使用MySQL检测垃圾邮件发送者
EN

Stack Overflow用户
提问于 2012-02-15 10:19:31
回答 1查看 603关注 0票数 5

我看到越来越多的用户在我的网站上注册,只是为了向其他用户发送重复的垃圾邮件。我添加了一些服务器端代码,用于使用以下mysql查询检测重复消息:

代码语言:javascript
复制
  SELECT count(content) as msgs_sent 
    FROM messages 
   WHERE sender_id = '.$sender_id.' 
GROUP BY content having count(content) > 10

查询运行得很好,但现在他们通过更改消息中的一些字符来绕过这个问题。有没有办法用MySQL检测到这一点,或者我需要查看从MySQL返回的每个分组,然后使用PHP来确定相似性百分比?

有什么想法或建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-15 10:31:35

全文匹配

您可以考虑实现类似于MATCH示例here的内容:

代码语言:javascript
复制
mysql> SELECT id, body, MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root') AS score
    -> FROM articles WHERE MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root');
+----+-------------------------------------+-----------------+
| id | body                                | score           |
+----+-------------------------------------+-----------------+
|  4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |
|  6 | When configured properly, MySQL ... | 1.3114095926285 |
+----+-------------------------------------+-----------------+
2 rows in set (0.00 sec)

对于您的示例,可能是:

代码语言:javascript
复制
SELECT id, MATCH (content) AGAINST ('your string') AS score
FROM messages 
WHERE MATCH (content) AGAINST ('your string')
    AND score > 1;

请注意,要使用这些函数,您的content列必须是FULLTEXT索引。

本例中的 score 是什么?

它是一个relevance value。通过下面描述的过程进行计算:

根据其在集合或查询中的重要性对集合和查询中的每个正确单词进行加权。因此,出现在许多文档中的单词具有较低的权重(甚至可能具有零权重),因为它在此特定集合中具有较低的语义值。相反,如果单词很少见,它会获得更高的权重。组合单词的权重以计算行的相关性。

documentation页面。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9287061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档