2012-02-08 96 views
0

我无法弄清楚,如果可能强制mysql在选择查询中选择结果时将某些指定的字符串视为相同。MYSQL强制模式匹配

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

有什么办法可以强制查询识别任何字母的模式? 例如,要将“ach”字母序列的单词内的任何实例与“ah”匹配 - 反之亦然。不管它是如何写的,本质上都是强制它。

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

我用soundex做了一点实验,它确实匹配了一些实例,但似乎由于算法的工作原理,它无法在所需匹配字符串位于单词开头的情况下执行。

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

我正在读入REGEXP,看它是否可以如此匹配。 (类似于 REGEXP'arch','arh')

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

我不确定我是否明确表示过,但希望得到任何帮助。

+0

能一莱文斯坦algoritm使用吗?喜欢的东西:http://www.artfulsoftware.com/infotree/queries.php#552 – 2012-02-08 18:04:08

+0

我测试了levenstein(自定义函数),但它似乎无法用这些类型的单词覆盖问题(特别是在c尽管它们在语音上相似,但是我会做出另一次尝试,因为我没有深入研究,因为它对于大型数据集似乎有点慢。 – Larry 2012-02-08 19:35:58

回答

0

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

或者你可以研究/写自己的转换,你想要什么,并在数据库中保存(在一个单独的列或表)之前将其应用到数据。

+0

不幸的是,soundex算法不能匹配像我描述得很好的情况,因为第一个字母(这是算法的关键因素)是不同的。 – Larry 2012-02-08 19:40:11

+0

这就是为什么我认为你需要编写你自己的哈希算法来做你所需要的。 – 2012-02-08 23:12:06