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