SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.08.2012 14:41:00

Михаил)
Участник
Зарегистрирован: 17.12.2010
Сообщений: 14

Помогите с полнотекстовым поиском - MATCH AGAINST

Мне требуется проверять 1000 текстов на предмет дубликатов. При уровне схожести более ~90% отмечать найденную пару как дублирующуюся, сохранив процент схожести. Т.е. точно то, что делает PHP-функция:

similar_text($orig_content,$dup_content,$dup_per)
, где переменной $dup_per присваивается значение процента схожести. Но скорость работы similar_text совершенно непригодна - скрипт, запущенный вчера, на данный момент еще дорабатывает.

Я пробовал уйти от использования функции similar_text, заменив её полнотекстовый поиском MySQL:
SELECT `id`,MATCH (content) AGAINST ('$row[content]' IN BOOLEAN MODE) AS `per` FROM `table` WHERE MATCH (content) AGAINST ('$row[content]') >'90' ORDER BY (per)
 

Но мне не понятно как значения, отдаваемые функцией MATCH привести к проценту "схожести", отдаваемому функцией similar_text.

Скорее всего полнотекстовый поиск это именно то, что мне нужно, но как реализовать его подобно тому, как это делает similar_text и получать те же значения?
В мануалах пишут, что MATCH возвращает "величину релевантности, т.е. степень сходства между строкой поиска и текстом".
Определить "на глаз" зависимость между этими значениями и процентом от функции similar_text не получилось.

Неактивен

 

#2 25.08.2012 17:59:37

Михаил)
Участник
Зарегистрирован: 17.12.2010
Сообщений: 14

Re: Помогите с полнотекстовым поиском - MATCH AGAINST

Нужна помощь, а тут - тишина. Админы смогут помочь?

Неактивен

 

#3 28.08.2012 19:37:07

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите с полнотекстовым поиском - MATCH AGAINST

MATCH AGAINST имеет другое назначение - поиск заданных слов в тексте. IN BOOLEAN MODE подразумевает использование специального языка запросов. Назначение определяет функциональность - скорее всего порядок слов в том, что ищется не имеет значения для результата (надо проверить). Вряд ли MATCH AGAINST будет заменой similar_text. Скорее всего медленность последней связана с неудачной реализацией в PHP - если реализовать алгоритм similar_text на C, он может быть будет работать быстрее.

Неактивен

 

#4 28.08.2012 19:51:42

Михаил)
Участник
Зарегистрирован: 17.12.2010
Сообщений: 14

Re: Помогите с полнотекстовым поиском - MATCH AGAINST

Спасибо за ответ!

Опишу свою задачу шире, может быть найдется кто-то, кто сталкивался с подобным:


Мне требуется проверять ~1000 текстов на предмет дубликатов. При уровне схожести более ~90% отмечать найденную пару как дублирующуюся, сохранив процент схожести. Т.е. точно то, что делает функция:

similar_text($orig_content,$dup_content,$dup_per)



где переменной $dup_per присваивается значение процента схожести.

Пробовал расстояние Левенштайна ( levenshtein() ), - замечательная штука, но при схожей с similar_text() скорости работы имеет ограничение на размер сравниваемых строк. В моем случае similar_text() - более подходящая.

Люди добрые, подскажите кто чем может!)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson