mysql如何增强名称模糊匹配

问题描述:

DB中存储30000000行。所有行都包含firstName和lastName。 我想用的firstName或lastName的查询数据,但我发现,一些lastName的含有不能被当前查询有正常firstName和lastName指数mysql如何增强名称模糊匹配

例特殊字符:Susanna [Von Essen] ,Susanna VonEssen , Susanna Von Essen
不同的lastName包含特殊字符,那么有什么办法可以增强查询这3种名称(相同的姓氏)?

仿真理想的结果:
查询:select *from provider where lastName like 'Von%'
结果:Susanna Von Essen,Susanna [Von Essen],Susanna VonEssen

查询:select *from provider where lastName like 'Von Essen%'
结果:Susanna Von Essen,Susanna [Von Essen],Susanna VonEssen

谢谢!

+0

有SOUNDEX()函数会返回字符串类似的语音https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_soundex。另请参阅http://www.databasejournal.com/features/mysql/mysql-fuzzy-text-searching-using-the-soundex-function.html,但我认为MySQL不太擅长模糊搜索。我会建议Elasticsearch出于这种目的。 –

+0

函数不支持索引搜索,这会使搜索慢一些,elasticsearch是可以的,但是现在不可能使用db迁移 –

尝试:

SELECT * FROM提供商那里lastName的LIKE '%冯%'

SELECT * FROM提供商那里lastName的LIKE '%冯·埃森%%'

SOUNDEX是非常原始的;我不会用它来做任何事情。

我建议您在插入行时使用“规范”形式的名称构造另一列。示例:删除括号,删除空格,复制多个可能的表单中的文本等。然后使用FULLTEXT进行搜索,因为列中会有多个“单词”。

这将涵盖一些“模糊”的情况。你可以调整它来捕捉更多的案例。