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
谢谢!
答
尝试:
SELECT * FROM提供商那里lastName的LIKE '%冯%'
SELECT * FROM提供商那里lastName的LIKE '%冯·埃森%%'
答
SOUNDEX
是非常原始的;我不会用它来做任何事情。
我建议您在插入行时使用“规范”形式的名称构造另一列。示例:删除括号,删除空格,复制多个可能的表单中的文本等。然后使用FULLTEXT
进行搜索,因为列中会有多个“单词”。
这将涵盖一些“模糊”的情况。你可以调整它来捕捉更多的案例。
有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出于这种目的。 –
函数不支持索引搜索,这会使搜索慢一些,elasticsearch是可以的,但是现在不可能使用db迁移 –