我对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
。
如何解决这个问题?
答案 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