Не допустить дублирование записей в базе

Духовность™

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

Как думаете, такой вариант тру?
 

fixxxer

К.О.
Партнер клуба
Ну начнут приписывать рандом в конец :) все равно придется что-то умнее придумывать.

Наверное, постят по сто раз, не потому что идиоты, а чтобы сверху быть. Используй это для монетизации. Поднимать объявление SMS-кой итд.

UPD: я там тебе тест запостил - ну теперь почти уверен что постят боты. Хотя бы капчу надо прилепить, или валидацию по мылу.
 
  • Like
Реакции: AmdY

Духовность™

Продвинутый новичок
Ну начнут приписывать рандом в конец :) все равно придется что-то умнее придумывать.

Наверное, постят по сто раз, не потому что идиоты, а чтобы сверху быть. Используй это для монетизации. Поднимать объявление SMS-кой итд.

UPD: я там тебе тест запостил - ну теперь почти уверен что постят боты. Хотя бы капчу надо прилепить, или валидацию по мылу.
Рандом в конец это не страшно, если этот "рандом" будет в виде иных комбинаций текста.
Постят именно сто раз неадекваты, пока ботов не видно. "Поднять объявление" действует только пока для списка объявлений в рубрике, на главной отображаются только новые. Да и до монетизации ещё как до Китая пешком.
 

igortik

Новичок
Думается мне ...
1. Только зарегистрированный отставляет объявление
2. ID юзера вяжется к объявлению
3. Далее, самое важное - идет проверка функциями MySQL (сейчас не могу вспомнить какая именно, но есть, с возвратом коэффициента) на схожесть текста, который постится с текстами, которые уже есть в базе у текущего пользователя.
3.1. Если коэффициент весомый, то отдаем предупреждение о паузе, например, 15 минут.
 

AmdY

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

akd

dive now, work later
Команда форума
AmdY, ээ .. вот два обьявления:

1. Продам телефон iPhone3Gs, состояние - отличное. куплен 7.2010, на гарантии. все коробки и бумажки прилагаются. фото девайса вышлю по запросу. причина продажи - у меня теперь Vertu. цена 120 рублей.

2. Продам телефон Nokia 554433, состояние - отличное. куплен 9.2010, на гарантии. все коробки и бумажки прилагаются. фото девайса вышлю по запросу. причина продажи - у меня теперь Vertu. цена 110 рублей.

большинство обьявлений о продаже очень похожи, даже если продаются очень разные вещи.
 

igortik

Новичок
Но в любом случае сравнивать мы можем либо данные, т.е. текст объявления, либо, время размещения и учитывать интервал.
 

craz

Нестандартное звание
Думается мне ...

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

akd

dive now, work later
Команда форума
igortik, да кто тебе мешает сравнивать все вместе .. у данных один коэфициент веса, у времени другой, у истории автора третий, у географии автора четвертый ... никаких либо. можно все мешать в кучу. единственное "в любом случае" - прийдется придумать формулу расчета. :)
 

AmdY

Пью пиво
Команда форума
akd
ну вот, припёрся и всё испортил, а так легко казалось :(

можно, конечно, пытаться анализировать слова попавшие в diff, но проще нанять наёмного работника для фильтрации :(
 

akd

dive now, work later
Команда форума
AmdY, ну для защиты от совсем тупых ботов и неадекватов, даже самой простой формулы с нормально расчитанными коэфициентами, вполне хватит. :)
 

igortik

Новичок
ну можн достать... хотя блин... если там 10к объявлений))))))))))))
для этого делается фильтр по юзеру и времени ;)

P.S.

Функция MATCH ... AGAINST() используется для полнотекстового поиска и возвращает величину релевантности - степень сходства между текстом в столбцах (col1,col2,...) и запросом expr. Величина релевантности представляет собой положительное число с плавающей точкой. Нулевая релевантность означает отсутствие сходства. Функция MATCH ... AGAINST() работает в версиях MySQL 3.23.23 или более поздних. Расширение IN BOOLEAN MODE было добавлено в версии 4.0.1.

http://www.mysql.ru/docs/man/String_comparison_functions.html
 

akd

dive now, work later
Команда форума
igortik, блин, я даже повторюсь: ээ .. вот два обьявления:

1. Продам телефон iPhone3Gs, состояние - отличное. куплен 7.2010, на гарантии. все коробки и бумажки прилагаются. фото девайса вышлю по запросу. причина продажи - у меня теперь Vertu. цена 120 рублей.

2. Продам телефон Nokia 554433, состояние - отличное. куплен 9.2010, на гарантии. все коробки и бумажки прилагаются. фото девайса вышлю по запросу. причина продажи - у меня теперь Vertu. цена 110 рублей.

угадай какая будет релевантность .. :))
 
Сверху