如何在数据库中找到类似的文字?

时间:2014-04-03 12:04:19

标签: php mysql

我们正在创建公司数据库,我们希望拥有独特的公司名称。但是,有时用户输入的方式不同,即有一天他们可能会输入“xyz,inc”,有一天他们可能会输入“xyz inc”。虽然名称在逻辑上相同,但不是出于数据库比较的目的。

有什么办法可以在MySQL数据库中找到相似的名字吗?我们已经考虑过使用LIKE,但决定反对它。

3 个答案:

答案 0 :(得分:2)

一种简单的方法是将用户输入分成单词,并删除标点符号:

"xyz, inc." becomes array("xyz", "inc")

然后你可以这样做:

SELECT
    *
FROM
    company
WHERE
    name LIKE '%xyz%'
    OR name LIKE '%inc%';

为了改善这一点,你可以为每个单词运行一次查询,并为它们添加权重(因此你需要一个加权表,它可能会说" inc"是一个常用词,因此它不重要)。更多的权重和更多的结果会增加每个结果的排名。

请记住,从性能角度来看,如果你有一个大表,这个策略可能不是最佳的,因为LIKE执行全表扫描。如果你有10K行就可以了,但如果你有1M行,你可能不会。与往常一样,您应该在有代表性的数据库上进行尝试,看看您的情况是什么样的。

这只是一个快速而简单的解决方案,但如果您要安装特定的搜索系统(如ElasticSearch或Lucene),您将获得更好的结果。

答案 1 :(得分:0)

Select * From table Where company Like '%xyz%'

Select * From table Where company Like '%xyz%' OR company Like '%inc%'

Select * From table Where company Like 'xyz%' AND company Like '%inc%'

最后一个会在你的情况下发挥最佳作用

答案 2 :(得分:0)

Select * From table Where company Like '%xyz%'

Select * From table Where company Like '%xyz' OR company Like '%inc'

Select * From table Where company Like 'xyz%' AND company Like 'inc%'

使用%符号从第一侧进行搜索,或将%符号放在最后一个位置以匹配最后一个,或将两侧放在一个匹配的位置。