【问题标题】:MYSQL search for right words | fixing spelling errorsMYSQL搜索正确的词|修复拼写错误
【发布时间】:2016-05-14 17:11:44
【问题描述】:

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

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

所以我想如果有人写这样的文字

“helo iam 正在为 gogle 寻找类似的引擎”。

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

【问题讨论】:

  • Soundex 可能会有所帮助,但皮特似乎已经成功了
  • 示例: SELECT * FROM products WHERE name 听起来像 'anton' 或作者听起来像 'anton'

标签: mysql sql spelling


【解决方案1】:

您可以使用soundex()函数进行语音比较

您的查询应该是这样的:

select * from table where soundex(word) like soundex('helo');

这将返回hello

【讨论】:

  • 不错的一个。以前从未听说过。它不会解决提问者的所有问题,但无论如何我都会投票赞成:)
【解决方案2】:

有一个函数确实需要你想要的,但它很密集并且会减慢查询速度。你可能可以在你的情况下使用,我以前用过。它被称为 Levenshtein。你可以在这里得到它How to add levenshtein function in mysql?

【讨论】:

  • 哦,太好了。请记住,在更大的查询中可能会变得缓慢。如果您喜欢,请接受我的回答。谢谢。
【解决方案3】:

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

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

您的查询将如下所示:

SELECT * FROM dictionary where SOUNDEX(word) = SOUNDEX(:yourSearchTerm)

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

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

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

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

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

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

【讨论】:

  • 我不喜欢投反对票,但是由于没有对传入的文本进行清理,您会对该行“代码”投反对票。
  • 我也是这么想的——我正在快速编写伪代码来说明总体思路。我对其进行了编辑以建议使用参数绑定。
  • 我喜欢这个答案。清理代码是对 SO 的要求吗?我相信处理清理和其他数据处理过程的提议功能的实施者。从这个答案中,我能够收集到两种不同的方法,我将自己研究并按照我认为合适的方式实施它们。谢谢!
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 2018-07-25
  • 1970-01-01
相关资源
最近更新 更多