mysql regexp用于使用别名进行搜索

时间:2011-09-01 11:46:09

标签: mysql regex search

我对regexp不太满意所以我真的希望得到一些帮助来实现我的目标 在我的数据库中搜索时,我使用特定关键字的别名。

这是一个例子

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

在含有2-3个别名的6个单词的情况下,组合太多了 我试图用正则表达式实现它。
在上面的场景中,它将类似于(bmw|b.m.w) 316

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您不是在寻找REGEXP正在寻找的东西called 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

最后这个问题也可以帮到你:
Implementation of Levenshtein distance for mysql/fuzzy search?

最接近匹配的查询类似于:

SELECT * FROM atable a ORDER BY levenshtein(a.field, '$search') ASC LIMIT 10