在我的应用程序中,我有一个用户表,其中包含first_name
和last_name
。我目前有第三列full_name
(自动生成),如下所示:first_name + last_name + first_name(没有特殊字符)。
"Etienne", "De Crécy", "Etienne De Crecy Etienne"
现在,我有一个简单的算法来自动完成用户输入(删除了特殊字符):
SELECT * FROM users WHERE full_name LIKE "%input%"
此查询返回 Etienne,输入Crécy Etienne
为 , Etienne De
, Cré
, Cre
,Etienne
我想在这个查询中添加一些模糊,以允许用户拼写错误。当用户编写时,这个新算法应该能够返回 Etienne:
Etiene
(类似于名字)Etienne Crecy
(与全名相似,不加分词)Crecy Etienne
(类似全名,不加分词,其他方向)De Cressi
(听起来像姓氏)Cressi
(听起来像姓氏,没有分词)
我做了很多搜索,最相关的想法是使用SOUNDEX
方法(或Metaphone
程序),或levenstein
程序。我不能像它一样使用它,因为:
- Soundex 基于第一个字母,then
SOUNDEX(Cressy)
与 不同SOUNDEX(De cressy)
,即使它们非常相似。 - 变音位基于字母的位置(以“kn”开头就像以“n”开头,但仅在第一个位置)
- levenstein 不关心字符串长度:De Cressy 与 Cressy 不同。
您对“混合”这些方法有什么想法,或者您对我有其他想法吗?