我们正在实现一个搜索应用程序
我们通过以下 sql 查询实现了精确的单词搜索
SELECT *
FROM jreviews_content
WHERE jr_produits REGEXP '[[:<:]]ryan[[:>:]]'
现在效果很好我们在我们的某些字段中还有另一个要求,即在 jr_title 字段中,如果用户填写了一个缺失的字母或一个字母错误或一个额外的字母,例如如果用户键入restauran 或restaunts 或餐馆,那么它应该给出结果但是不超过一个字母。
寻找“Levenshtein 距离”
一个实现在这里
http://www.artfulsoftware.com/infotree/queries.php#552
或作为编译函数
http://samjlevy.com/2011/03/mysql-levenshtein-and-damerau-levenshtein-udfs/
虽然没有严格回答您的问题,SOUNDS LIKE
但可能是您的最佳选择:
SELECT *
FROM jreviews_content
WHERE jr_produits SOUNDS LIKE 'ryan'
这使用soundex算法来比较字符串。
这将允许在搜索字符串之前有一个字母数字字符,在搜索字符串之后有一个:
SELECT *
FROM jreviews_content
WHERE jr_produits REGEXP '[[:<:]][[:alnum:]]{0,1}ryan[[:alnum:]]{0,1}[[:>:]]'
如果您想在搜索字符串之前或之后允许一个字母数字字符,您可以使用它来代替:
SELECT *
FROM jreviews_content
WHERE
jr_produits REGEXP '[[:<:]][[:alnum:]]{0,1}ryan[[:>:]]'
OR jr_produits REGEXP '[[:<:]]ryan[[:alnum:]]{0,1}[[:>:]]'
检查http://en.wikipedia.org/wiki/Edit_distance
这是任何搜索引擎的基础。