Я вижу, что все большее число пользователей регистрируются на моем сайте, чтобы просто отправлять дублирующиеся сообщения SPAM другим пользователям. Я добавил код на стороне сервера, чтобы обнаружить повторяющиеся сообщения со следующим запросом mysql:
SELECT count(content) as msgs_sent FROM messages WHERE sender_id = '.$sender_id.' GROUP BY content having count(content) > 10
Запрос работает хорошо, но теперь они обходятся, изменяя несколько charctersr в своих сообщениях. Есть ли способ обнаружить это с помощью MySQL или мне нужно посмотреть на каждую группу, возвращаемую из MySQL, а затем использовать PHP для определения процента сходства?
Любые мысли или предложения?
Полнотекстовый матч
Вы можете посмотреть на реализацию чего-то похожего на пример MATCH
:
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)
Итак, для вашего примера, возможно:
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
. Он вычисляется с помощью процесса, описанного ниже:
Каждое правильное слово в коллекции и в запросе взвешивается в соответствии с его значением в коллекции или запросе. Следовательно, слово, которое присутствует во многих документах, имеет более низкий вес (и может даже иметь нулевой вес), потому что оно имеет более низкое семантическое значение в этой конкретной коллекции. И наоборот, если слово встречается редко, оно получает больший вес. Весовые слова объединяются для вычисления значимости строки.
На странице документации .