在确切的单词搜索中允许一个字母错误

时间:2013-10-15 11:32:49

标签: mysql sql

我们正在实施搜索应用程序

我们通过以下sql查询实现了精确的单词搜索

SELECT *
FROM jreviews_content
WHERE jr_produits REGEXP '[[:<:]]ryan[[:>:]]'

现在我们在某些字段中有另一个要求,例如在jr_title字段中,如果用户填写一个丢失的字母或一个字母错误或一个额外的字母,例如,如果用户键入restauran或餐厅或餐馆,那么它应该给结果但不超过一个字母。

4 个答案:

答案 0 :(得分:2)

答案 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}[[:>:]]'