MySQL регулярное выражение для поиска с использованием псевдоним - PullRequest
0 голосов
/ 01 сентября 2011

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

Вот пример

keyword  tets alias test   (someone have spell wrong then word test)
keyword  b.m.w  alias bmw  (if someone write b.m.w instead of bmw)

и т.д.

Пока что пользователь ищет "bmw 316", я использую LIKE "%bmw%316%", чтобы получить результаты. Теперь, если пользователь ищет "b.m.w 316", я должен использовать

"%b.m.w%316%" OR
"%bmw%316%"

потому что b.m.w имеет псевдоним bmw.

В случае 6 слов с 2-3 псевдонимами слишком много комбинаций.
Я пытаюсь достичь этого с помощью регулярного выражения.
В приведенном выше сценарии это будет что-то вроде (bmw|b.m.w) 316.

Как мне решить эту проблему?

1 Ответ

1 голос
/ 01 сентября 2011

Вы не ищете REGEXP Вы ищете вещь под названием levenshtein distance

MySQL (пока) не имеет встроенной поддержки этой (замечательной) концепции, ноВы можете скачать UDF здесь:
http://joshdrew.com/
И вот список, поэтому у вас есть что выбрать:
http://blog.lolyco.com/sean/2008/08/27/damerau-levenshtein-algorithm-levenshtein-with-transpositions/

Вы также можете написать свойсобственная функция в MySQL, поэтому вам не нужно устанавливать UDF.
http://www.supermind.org/blog/927/working-mysql-5-1-levenshtein-stored-procedure

Наконец, этот вопрос также может вам помочь:
Реализация Левенштейнарасстояние для поиска mysql / fuzzy?

Запрос на самое близкое совпадение будет выглядеть примерно так:

SELECT * FROM atable a ORDER BY levenshtein(a.field, '$search') ASC LIMIT 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...