2014-12-22 4 views
1

Я поддерживаю публичный блог, на который пользователи могут публиковать свои сообщения. Некоторые пользователи имеют более тысячи различных текстов, и они могут не помнить, что они уже опубликовали какой-то текст. Я хотел бы помочь пользователям не публиковать дубликаты.Быстрый поиск аналогичного текста

Сравнение текстов для точного равенства не является хорошим - пользователь мог немного изменить текст или форматировать или скопировать из другой программы и т. Д. Поэтому мне нужна быстрая оценка, если в существующей базе данных есть аналогичный текст.

В мой стек технологий входят PHP, MySQL и Redis. Как я могу решить свою проблему с помощью тех или иных инструментов?

ответ

1

PHP имеет функцию, называемую аналогичным_текстом, которую вы можете использовать для вычисления количества совпадающих символов или сходства в процентах.

http://php.net/manual/en/function.similar-text.php

Затем можно проверить, если данный текст находится в пределах определенного края старых сообщений в блоге.

Если вы не хотите проверять наличие сходства в тексте, вы можете попытаться пометить сообщения на основе тегов исходного блога или темы блога. А затем покажите пользователям сообщения, которые они сделали с похожими тегами.

1

Вы можете использовать матч MySQL - против в столбце с полным текстом.

В качестве примера:

SELECT table.*, 
MATCH(userText) AGAINST ('this is user input') AS relevancy 
FROM table 
ORDER BY relevancy DESC; 

Так что это даст вам результаты упорядоченных по релевантности.

Не забудьте добавить полный текст в колонку userText.

+0

На данный момент для всех таблиц потребуется зеркальный стол MyISAM в качестве механизма пользователя InnoDB. –

+0

с MySQL 5.6.4 доступна полнотекстовая поддержка InnoDB. Но для более старых версий вы правы, доступен только MyISAM. – isa

Смежные вопросы