Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql Levenshtein通配符?_Mysql_Sql_User Defined Functions - Fatal编程技术网

mysql Levenshtein通配符?

mysql Levenshtein通配符?,mysql,sql,user-defined-functions,Mysql,Sql,User Defined Functions,我在我的网站上有一个这样的搜索 SELECT * FROM `artist` WHERE `ARTIST` LIKE '%Live%' GROUP BY `ARTIST` ORDER BY CASE WHEN `ARTIST` LIKE 'LIVE' THEN 0 WHEN `ARTIST` LIKE 'LIVE%' THEN 1 WHEN `ARTIST` LIKE '%LIVE%' THEN 2 ELSE 3, `ARTIST` 这对我来说非常有效,直到拼写错误开始发生。如果有拼写错

我在我的网站上有一个这样的搜索

SELECT * FROM `artist` WHERE `ARTIST` LIKE '%Live%' 
GROUP BY `ARTIST` ORDER BY CASE 
WHEN `ARTIST` LIKE 'LIVE' THEN 0 
WHEN `ARTIST` LIKE 'LIVE%' THEN 1
WHEN `ARTIST` LIKE '%LIVE%' THEN 2
ELSE 3, `ARTIST`
这对我来说非常有效,直到拼写错误开始发生。如果有拼写错误,我要么得到错误的结果,要么(更可能)没有结果

我发现levenshtein UDF在

在玩了一段时间后,我重新体验了通配符“%”不起作用


可以使用通配符吗?如果没有,是否有一个函数同时具有LIKE和levenshtein的属性,它将替换字母并在一长串单词中查找一个单词

levenshtein是为了告诉您两个单词有多相似,因此通配符是没有意义的。然而,由于它不是很快,你需要比较每个艺术家使用这个相当慢的检查,你会发现反应相当慢。您可以尝试soundex和/或变音功能,以获得单词的简单表示,然后将这些(索引)与搜索字符串的soundex/变音进行比较Thank@Kickstart,但我更希望能够像我所说的那样进行搜索。我不是soundex的最大粉丝,因为我的db有祖鲁族的艺术家,所以soundex有点像这里。我可能会在php中构建一个algo来解决这个问题。我一直在为一个工作站点编写搜索系统。我的基本方法是索引所有单词(因此在您的例子中,将艺术家的名字分解成一个单词列表),并为该单词的项目创建一个链接列表。当有人搜索时,我把他们的搜索字符串分解成单个单词。对于每个单词,我会找到所有以相同字母开头的索引单词,它们的字符数大致相同。对于这些单词,我使用levenshtein(在php中)查找最佳匹配项,然后查找包含这些单词的项。这可以很好地处理拼写错误。谢谢。我将对此进行彻底调查。这似乎是处理打字错误的最好方法。您是否可以建议将每个单词作为我自己的自定义“词典”保存到数据库中?我就是这样做的。还有一个常见打字错误的索引(也许是John代表John),还有一个常见的替代词(也许是Jon代表John)。然后我可能会搜索几次(因此,如果有人搜索“约翰·韦恩”,可能会第二次搜索“乔恩·韦恩”)。此外,我也不麻烦索引某些单词。结果索引了大约75k个单词,以及项目和单词之间大约800k个链接。