MySQL максимально похожие записи

Статус
В этой теме нельзя размещать новые ответы.

Dark Wizard

Гуру форума
Регистрация
23 Сен 2007
Сообщения
194
Реакции
80
Привет, такая проблема

есть 2 таблицы, в одной поле со значением
"MyPal A686 + NAVITEL 3.0 GPS", а в другой
"КПК Asus A686 Навител"

Как мне написать запрос, который найдёт максимально похожие записи? (несколько штук)

Просто
PHP:
WHERE name %LIKE%
уже пробовал.
 
задача не такая простая как кажется.
как минимум тут нужно сделать базу ключевых слов-синонимов, чтобы твой алгоритм знал, что навител и navitel это одно и то же. а потом видимо приводить все записи к некому упрощенному виду, и если они в таком виде будут повторяться, то удалять одну из них.

Короче если нужно один раз, то проще ручками.
 
можно попробовать функцию soundex но работает только с ascii:
SELECT STRCMP(SOUNDEX('MyPal A686 + NAVITEL 3.0 GPSr'), SOUNDEX('Asus A686'))


или регулярными выражениями:
SELECT 'КПК Asus A686 Навител' REGEXP REPLACE(REPLACE('MyPal A686 + NAVITEL 3.0 GPSr', ' + ', '|'), ' ', '|');


или разбивать на слова и делать поиск:
SELECT LOCATE('MyPal', 'КПК Asus A686 Навител') OR LOCATE('A686', 'КПК Asus A686 Навител');
SELECT 'КПК Asus A686 Навител' LIKE '%A686%';
 
Может быть Match()... Against() попробуете?
 
  • Заблокирован
  • #5
Dark Wizard отпиши пожалуйста какой методод более эфективен.
У меня та же проблема, но решение нашел только в языке PHP, там есть функция незамысловатая similar_text(), пробовал получаеться, но не всегда.
 
я делал через доп поле с индексом, куда пихал значение soundex() для текста, только предварительно чистил цифры, 1-2 буквенные слова и т.п мусор

для поиска запрос чистил от мусора и использовал LIKE

обычно совпадений хватало с лихвой :)
 
Полнотекстовый поиск для чего существует?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху