html - 松散搜索,例如这样 "htlm"就会找到 "html5"

标签 html mysql sql search where-clause

我有一个巨大的数据库,其中包含 htmlhtml5xhtml 等关键字。 用户可以搜索房间,到目前为止它只是被实现为

[...] WHERE name LIKE '%keyword%' LIMIT 20;

这是一个简单的解决方案,但它不具有容错能力。而且用户也会犯很多错误。为了增强这一点,我想引入一个“松散搜索”,这意味着如果“html”不返回或仅返回很少(例如,少于 10)个匹配项,它会添加“html”并类似于列表。

现在真正的问题是:我该怎么做? 这种“松散搜索”有专业术语吗?

最佳答案

这绝对是文本检索的一部分,也称为模糊匹配或近似字符串匹配。例如,转到 Google,输入“MSYQL”,它会推荐“MYSQL”。

这是一种典型的方法。从所有有效关键字的列表开始。是的,这就是开始的地方。在许多文本应用程序中,这称为词典。

在有效关键字列表中查找您的搜索词。如果没有找到,则使用称为“Levenshtein distance”(描述为 here )的东西来查找最接近的匹配项。然后在搜索中使用这些。如果您搜索“Levenshtein distance mysql”,您将在这里找到该算法的实现。

如果您只有几个已知的拼写错误,那么您也可以使用同义词库来解决问题。这会将一个搜索词替换为其他可能匹配的词。

关于html - 松散搜索,例如这样 "htlm"就会找到 "html5",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18614015/

相关文章:

php - Yii CDbCriteria 加入

html - Bootstrap Accordion 优缺点问题

php - 将跟踪像素添加到 jquery 图像轮播中的每个图像

html - Bootstrap 中导航栏下方的白色栏

c# - sql char 和 varchar 数据类型不支持哪些字符

mysql - 恢复phpMyAdmin用户名

Mysql不通过触发器更新同表不同列的avg函数

sql - 只查询每条主记录的第一条明细记录

javascript - 如何将 ng-bind-html 行为封装到自定义指令中

mysql - 一种在语言标记后清理特定字符串的方法