PHP基于MySQL的搜索与近似匹配

时间:2015-12-18 00:24:36

标签: php mysql sql

我想在拼写错误或产品名称特殊字符的情况下使我的搜索功能更加巧妙地工作。

例如,我们有一个名为“Post-it”的产品,如果用户输入“Post it”或“Postit”,我们想要显示它。
另一个例子,我们有一个名为“bic clic stic”的产品,如果用户搜索“bic clic stick”,我们希望显示它,因为它有一个紧密的匹配。

我们当前的查询如下:

SELECT name, image, sku, description FROM products WHERE name like '%KEYWORD%' AND ....

1 个答案:

答案 0 :(得分:2)

解决此问题的大多数方法都不是特别有效。也就是说,它们仍然需要全表扫描(尽管可以进行一些优化)。

技术解决方案是一种称为Levenshtein距离(或更一般地,编辑距离)的算法。这是一种测量两个字符串之间距离的方法,对于您问题中的示例,它非常有效。

你可以google" MySQL Levenshtein"获得各种实现。

请注意,实施效率不高;他们需要全桌扫描。生成的查询看起来像:

SELECT name, image, sku, description
FROM products
WHERE levenshtein(name, 'KEYWORD') <= 3; -- or some threshhold value