繁体   English   中英

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

[英]mysql regexp for search using alias

我对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%"来获得结果。 现在,如果用户搜索"bmw 316" ,则必须使用

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

因为bmw具有别名bmw

如果6个单词的别名为2-3,则组合太多。
我正在尝试使用正则表达式来实现它。
在上述情况下,它将类似于(bmw|bmw) 316

我该如何解决这个问题?

您不是在寻找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

最后,这个问题也可能对您有所帮助:
Levenshtein距离的实现为MySQL /模糊搜索?

最匹配的查询看起来像:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM