2017-10-18 66 views
-1

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遷移 –

回答

0

嘗試:

SELECT * FROM提供商那裏lastName的LIKE '%馮%'

SELECT * FROM提供商那裏lastName的LIKE '%馮·埃森%%'

0

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

我建議您在插入行時使用「規範」形式的名稱構造另一列。示例:刪除括號,刪除空格,複製多個可能的表單中的文本等。然後使用FULLTEXT進行搜索,因爲列中會有多個「單詞」。

這將涵蓋一些「模糊」的情況。你可以調整它來捕捉更多的案例。