2

我们正在实现一个搜索应用程序

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

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

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

4

4 回答 4

2

寻找“Levenshtein 距离”

一个实现在这里

http://www.artfulsoftware.com/infotree/queries.php#552

或作为编译函数

http://samjlevy.com/2011/03/mysql-levenshtein-and-damerau-levenshtein-udfs/

于 2013-10-15T12:03:31.150 回答
1

虽然没有严格回答您的问题,SOUNDS LIKE 但可能是您的最佳选择:

SELECT *
FROM jreviews_content
WHERE jr_produits SOUNDS LIKE 'ryan'

这使用soundex算法来比较字符串。

于 2013-10-15T11:36:55.877 回答
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}[[:>:]]'
于 2013-10-16T12:19:20.220 回答
1

检查http://en.wikipedia.org/wiki/Edit_distance

这是任何搜索引擎的基础。

于 2013-10-15T11:48:50.847 回答