mysql 正则表达式使用别名进行搜索

标签 mysql regex search

我不太擅长正则表达式,所以我真的需要一些帮助来实现我的目标。
在数据库中搜索时,我使用特定关键字的别名。

这是一个例子

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

如何解决这个问题?

最佳答案

您不是在寻找REGEXP,您正在寻找一个东西 called levenshtein distance

MySQL 还没有对这个(美妙的)概念提供 native 支持,但您可以在此处下载 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

关于mysql 正则表达式使用别名进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269819/

相关文章:

php - 如何使这个查询发生

php - 在php中的url href中传递值

正则表达式,匹配不超过 n 次

python - 从 python 的肯定后向断言中获取匹配的第二次出现

java - 正则表达式中的双正斜杠句点

search - 估计整数压缩列表上的最大有效负载大小

regex - 替换文件中最后一次出现的字符串

php - MySQL - 如何使用一个查询更新两个表,其中表 2 值为 true?

search - 你如何在 SAS 中返回包含目标值的库中所有表中所有列的列表?

mysql/mariadb : Access denied