2015-04-17 3 views
2

Я работаю над перенаправлением людей, если они набирают «не совсем неправильный URL».Как сравнить строки на основе сходства персонажей в SQL?

Например, у меня есть хороший URL http://www.website.com/category/foo-bar-if-bar-foo/. Это работает так, если пользователь вводит на мой сайт с ним, я могу получить соответствующую статью.

Но если кто-то вошел в мой сайт с не очень неправильным URL, как http://www.website.com/category/foo-bar-foo/, потому что другой веб-сайт ссылается на неверный URL, я должен перенаправить его правую вместо того, код 404 состояния ...

Итак, как мне это сделать? И самое главное, должен ли я это сделать?

Я действительно использую Красноречие с Laravel 4.2.

Заранее спасибо.

EDIT

Я был неправ StackOverflow, спасибо за ваш комментарий. Он использует уникальный идентификатор сообщения.

EDIT 2

Я Посмотрел функцию SOUNDEX в SQL, это действительно хорошо, если есть небольшая разница, как символ или два пропавших. Но если мой URL-адрес так же сломан, как и мой пример, он явно не работает. Но спасибо, что это будет полезно.

+1

Это потому, что StackOverflow использует номер ('29695569' в вашем примере) как уникальный идентификатор для поиска и на самом деле не заботится о части текстовой строки URL-адреса вообще ... это просто для SEO –

+0

ну, это точка! – KeizerBridge

+2

Волшебное слово здесь - «нечеткий поиск». Проверьте функцию 'SOUNDEX()' в MySQL (https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex) – prehfeldt

ответ

3

Просто подумав над головой, вы можете создать таблицу SQL (с включенной полнотекстовой индексацией), содержащую все ваши пути (она может уже существовать).

В том случае, если 404 срабатывает, угнать, что и делать MATCH (Full Text Search) и возвращает путь с самым высоким скоринг MATCH (вы можете также рассмотреть возможность использования порогового балла, чтобы предотвратить бессмысленные матчи).

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