我搜索后发现如何在字符串
上进行模糊搜索但我有一个字符串数组
$search = {"a" => "laptop","b" => "screen" ....}
我从DB MySQL中检索到了
是否有任何php类或函数对单词数组进行模糊搜索
或至少与某些有用信息的链接
我看到推荐使用PostgreSQL的评论
它是模糊搜索功能但是
该公司已经有一个MySQL数据库有什么建议吗?
答案 0 :(得分:3)
你可以在MySQL中执行此操作,因为你已经有了一个MySQL数据库 - How do I do a fuzzy match of company names in MYSQL with PHP for auto-complete?提到MySQL Double Metaphone implementation并且在SQL 5.0中有一个implementation用于MySQL 5.0 +
编辑:很抱歉在这里回答,因为评论不仅仅是...
由于您已经使用PHP Levenshtein function接受了答案,我建议您先尝试这种方法。软件是迭代的; PHP数组搜索可能正是您想要的,但您必须首先根据您的要求测试和实现它。正如我在your other question中所说的那样,在您键入解决方案时,解决方案可能是最简单的解决方案,它只是在用户输入时缩小产品范围。可能不需要实现任何模糊搜索,因为您使用用户进行模糊搜索: - )
例如,用户开始输入S
,a
,m
,这样您就可以将产品缩小为以Sam
开头的产品。因此,您始终只让用户选择您已知的产品才有效。
答案 1 :(得分:2)
基本上,它为您提供了字符串之间的差异(就成本而言)。即将字符串A转换为字符串B的成本是多少。
为自己设定一个阈值levenshein距离,两个词之下的任何东西都意味着它们是相似的。
同样Bitap algorithm更快,因为它可以通过按位运算符实现,但我相信你必须自己实现它,除非在某处有一个PHP库。
修改强> 使用levenshtein方法:
搜索字符串是“maptop”,您将“成本阈值”设置为2.这意味着您希望任何两个字符串转换操作的单词远离搜索字符串。
所以你循环遍历数组“A”字符串,直到
levenshtein ( A[i] , searchString ) <= 2
这将是你的比赛。 然而您可能会得到多个匹配的单词,因此您需要如何处理额外的结果。