MYSQL强制模式匹配

时间:2012-02-08 17:44:26

标签: mysql regex matching

我无法确定在选择查询中选择结果时是否可以强制mysql将某些指定字符串视为相同。

例如,我有一个包含单词“trachiotomy”的列,但由于语言的性质,搜索查询很可能是“trahiotomy”(注意缺少c)。

有什么方法可以强制查询识别出另一个字母的任何模式? 例如,将“ach”字母序列中的任何实例与“ah”匹配 - 反之亦然。从本质上讲,无论它是如何写的,都要强迫它。

另一个例子是Archon这个词 - 我也希望与Arhon匹配。 因此,如果用户输入是Archon,它将匹配数据库数据Arhon,反之亦然。

我尝试了soundex,它确实匹配了一些实例,但似乎由于算法的工作方式,它无法在所需匹配字符串位于单词开头的情况下进行。

例如,“Chorevo”这个词不能匹配“Horevo”这个词,除非我能以某种方式强迫它认为“chor”等于“hor”,反之亦然。

我正在阅读REGEXP以查看它是否可以以某种方式匹配。 (就像是 REGEXP'arch','arh')

此时我正在使用全文匹配查询,但如果证明这是一个问题,可能会改变它。

我不确定我是否明确表达了这一点,但我将不胜感激。

1 个答案:

答案 0 :(得分:0)

这称为语音匹配。 MySQL在soundex(str)函数和a SOUNDS_LIKE b子句中实现了相对原始的版本(这只是soundex(a) = soundex(b)的简写。本质上,这种匹配是特定于语言的,并且MySQL实现是设计的对于英语单词,因此可能无法在您的情况下工作。

或者,您可以研究/编写自己想做的转换,并在保存到数据库之前将其应用于数据(在单独的列或表中)。