Php 警告已输入类似的数据

Php 警告已输入类似的数据,php,mysql,Php,Mysql,我试图找出一种方法来检测之前是否有类似的输入输入输入到mysql数据库中。 我不是说重复条目没有相似但不准确,问题是,当数据输入人员需要输入一个名称时,名称的发音可能会不同,因此我需要一种方法,以便我的php代码检测是否已经输入了一个与输入的名称类似的条目,并警告工作人员再次检查它是否是相同的名称mysql本身,但需要由您的代码处理。因此,在将任何数据插入表之前,需要制定并执行查询以查找潜在的相似数据。类似的定义在很大程度上取决于您的业务需求 模糊搜索不是MySQL的强项,因为您可能会避开一个或

我试图找出一种方法来检测之前是否有类似的输入输入输入到mysql数据库中。
我不是说重复条目没有相似但不准确,问题是,当数据输入人员需要输入一个名称时,名称的发音可能会不同,因此我需要一种方法,以便我的php代码检测是否已经输入了一个与输入的名称类似的条目,并警告工作人员再次检查它是否是相同的名称mysql本身,但需要由您的代码处理。因此,在将任何数据插入表之前,需要制定并执行查询以查找潜在的相似数据。类似的定义在很大程度上取决于您的业务需求

模糊搜索不是MySQL的强项,因为您可能会避开一个或几个类似的条件。通过使用通配符占位符计算可能的变化,并将它们组合到一个查询中,可以搜索两个(可能是三个)Levenshtein距离的变化。下面将详细介绍此方法。根据这些查询的复杂性和系统上的流量,这可能会很容易地导致mysql实例崩溃

如果性能是个问题,像Elasticsearch这样的搜索引擎可能会有所帮助。将数据插入MySQL时,这些数据也将作为文档添加到Elasticsearch中。这将允许使用Elasticsearch的模糊搜索功能来搜索类似的记录,而Elasticsearch的性能远远高于MySQL


如果MySQL的事务安全性不是应用程序的要求,你也可以选择用Elasticsearch取代MySQL,并使用Elasticsearch不仅用于搜索,还用于持久性。

你需要针对数据库编写sql和查询。这可能是一个非常复杂的问题。如果名称有英语发音,你可能可以使用,对于其他语言,在插入或查询之前,需要计算mysql之外的值。但是这种方法也可能失败,这取决于实际的用例。这可以由mysql单独完成。根据处理方式的不同,可以通过在函数中包装insert、insert触发器或分离insert和lookup比较来实现。查找比较可以使用soundex开箱即用或更复杂的用户定义音素算法来实现。Levenstein是完全错误的算法。同意,我没有考虑使用钩子。但我绝对不会同意莱文斯坦是完全错误的。算法的选择取决于相似的定义。如果你正在寻找发音时声音不同的单词,那么soundex是一个不错的选择。如果你想找到包含拼写错误的类似单词,Levenstein是一个有效的选择。