2017-10-18 8 views
-1

DBには30000000行が格納されています。すべての行にはfirstNameとlastNameが含まれています。 私はfirstNameのかlastNameのことで、データを照会したいのですが、私はいくつかのlastNameの照会することができない特殊文字が含まれている現在、通常、姓と名のインデックスmysql名前のファジーマッチングを強化する方法

例の両方が存在することがわかった:Susanna [Von Essen] ,Susanna VonEssen , Susanna Von Essen
が異なるlastNameの特殊文字が含まれています、私はこれらの3種類の名前(同じlastName)を照会するためにどのような方法を拡張することができますか?

シミュレーション理想的な結果:
クエリ: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

発音がhttps://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_soundexのような文字列を返すSOUNDEX()関数があります。 http://www.databasejournal.com/features/mysql/mysql-fuzzy-text-searching-using-the-soundex-function.htmlも参照してください。しかし、私は、あまりにもファジィ検索にはあまり良くないと思います。このような目的のために私はElasticsearchを提案します。 –

+0

関数はインデックス検索をサポートしていません。これにより検索が遅くなります。elasticsearchは正常ですが、dbの移行は現在不可能です –

答えて

0

試してみてください。

選択* lastNameの '%フォンの%' のようなプロバイダから

選択* lastNameの '%フォン%エッセン%'

0

SOUNDEXなどのプロバイダからは非常に原始的です。私は何のためにそれを使用しません。

私は、行を挿入するときに、名前の "正式な"形式の別の列を作成することをお勧めします。例:大括弧を削除したり、スペースを削除したり、複数の可能性の高いフォームでテキストを複製したりします。その後、列に複数の「単語」があるため、FULLTEXTを使用して検索します。

これは、の一部、「あいまいな」ケースをカバーします。より多くのケースをキャッチするためにそれを適応させることができます。

関連する問題