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

Тема в разделе "Как сделать...", создана пользователем Dark Wizard, 16 дек 2009.

Статус темы:
Закрыта.
  1. Dark Wizard

    Dark Wizard

    Регистр.:
    23 сен 2007
    Сообщения:
    153
    Симпатии:
    76
    Привет, такая проблема

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

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

    Просто
    PHP:
    WHERE name %LIKE
    уже пробовал.
     
  2. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    125
    задача не такая простая как кажется.
    как минимум тут нужно сделать базу ключевых слов-синонимов, чтобы твой алгоритм знал, что навител и navitel это одно и то же. а потом видимо приводить все записи к некому упрощенному виду, и если они в таком виде будут повторяться, то удалять одну из них.

    Короче если нужно один раз, то проще ручками.
     
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    можно попробовать функцию 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%';
     
  4. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Может быть Match()... Against() попробуете?
     
  5. Sliph

    Sliph Читатель

    Заблокирован
    Регистр.:
    7 мар 2008
    Сообщения:
    49
    Симпатии:
    6
    Dark Wizard отпиши пожалуйста какой методод более эфективен.
    У меня та же проблема, но решение нашел только в языке PHP, там есть функция незамысловатая similar_text(), пробовал получаеться, но не всегда.
     
  6. Zak

    Zak Постоялец

    Регистр.:
    13 апр 2006
    Сообщения:
    94
    Симпатии:
    6
    я делал через доп поле с индексом, куда пихал значение soundex() для текста, только предварительно чистил цифры, 1-2 буквенные слова и т.п мусор

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

    обычно совпадений хватало с лихвой :)
     
  7. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Полнотекстовый поиск для чего существует?
     
Статус темы:
Закрыта.