我有一个表dictionary
,其中包含单词列表,如:
ID|word
---------
1|hello
2|google
3|similar
...
所以我想如果有人写了像
这样的文字“helo iam正在寻找gogle的simlar引擎”。
现在我想检查每个单词是否存在于数据库中,如果不存在的话
给我这个词的相似词。例如:helo = hello, simlar = similar, gogle = google
。
好吧,我想解决拼写错误。在我的数据库中,我有一个完整的英语单词词典。我找不到任何帮助我的mysql函数。 LIKE
对我的情况没有帮助。
答案 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