我有一个巨大的数据库,其中包含 html
、html5
、xhtml
等关键字。
用户可以搜索房间,到目前为止它只是被实现为
[...] 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/