MYSQL搜索正确的单词|修复拼写错误

时间:2016-02-04 21:34:24

标签: mysql sql spelling

我有一个表dictionary,其中包含单词列表,如:

   ID|word
   ---------
    1|hello
    2|google
    3|similar
    ...

所以我想如果有人写了像

这样的文字

“helo iam正在寻找gogle的simlar引擎”。

现在我想检查每个单词是否存在于数据库中,如果不存在的话 给我这个词的相似词。例如:helo = hello, simlar = similar, gogle = google。 好吧,我想解决拼写错误。在我的数据库中,我有一个完整的英语单词词典。我找不到任何帮助我的mysql函数。 LIKE对我的情况没有帮助。

3 个答案:

答案 0 :(得分:5)

您可以使用soundex()功能进行语音比较

您的查询应该是:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <script>
        function init() {
            var timestamp = new Date().valueOf();
            window.location = "main.html?" + timestamp;
        }
    </script>
</head>
<body onload="init()">

</body>
</html>

这将返回select * from table where soundex(word) like soundex('helo');

答案 1 :(得分:3)

有一个功能大致想要你想要的,但它是密集的,会减慢查询速度。您可以在您的环境中使用,我之前使用过它。它被称为Levenshtein。你可以在这里How to add levenshtein function in mysql?

答案 2 :(得分:2)

您想要做的是模糊搜索。你可以使用MySQL中的SOUNDEX函数,在这里记录:

http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_soundex

您的查询将如下所示:

SELECT * FROM dictionary其中SOUNDEX(word)= SOUNDEX(:yourSearchTerm)

...您的搜索字词绑定到:yourSearchTerm参数值。

下一步是尝试在MySQL中实现和使用Levenshtein函数。一个在这里描述:

http://www.artfulsoftware.com/infotree/qrytip.php?id=552

  

两个弦之间的Levenshtein距离是最小数量   将一个字符串转换为另一个字符串所需的操作,其中a   操作可以是插入,删除或替换一个字符。

您也可以考虑查看针对全文搜索的数据库,例如Elastic Search,它本身提供此功能:

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html