sql >> データベース >  >> RDS >> Mysql

MySQLに人間の名前を保存するというジレンマを解決し、識別可能性と類似した名前の検索の両方を維持するにはどうすればよいですか?

    フルネームをコンポーネントの「名前の単語」に分解し、それぞれの音声エンコーディング(メタフォンまたは他の多くの選択肢の1つ)を保存できると便利です。ただし、名前の単語の概念が必要なだけで、最初、中間、または最後に具体的に分類する必要はありません。これらのカテゴリは、文化を超えてうまく機能しないため、問題ありません)。ただし、「Paul Carl」の検索が「CarlPaul」よりも「PaulKarl」と一致するようにする場合は、ランキングの後半で位置順情報を使用できます。いくつかの名前の単語の複数のバージョンを格納する必要があるかもしれない曖昧な句読点に注意する必要があります。たとえば、Bre-Anna Heimは、「bre」、「anna」、「breanna」、「heim」という名前に分割されます。ダッシュはBre-Annaのように無関係な場合もありますが、Sally-Juneのようにそうでない場合もあります。両方の可能性をカバーします。

    検索しているフルネームを同様に分解して音声的にエンコードすることにより、これに対してクエリを作成できます。たとえば、クエリは、コンポーネント名の音声が2つ以上一致するフルネーム(検索またはソースに名前が1つしかない場合は1つ)を返すことができます。これにより、さらに検討するフルネームのサブセットが得られます。それらの単純なランキングを考え出すことも、このサブセットに対して距離マッチングアルゴリズムのようなことを行うこともできます。これは、100万の名前全体に対して計算するにはコストがかかりすぎます。距離マッチングとは、レーベンシュタイン距離などのオンラインアルゴリズムを指します。

    (編集)この理由は、次の名前のようなケースを処理することです:Maria de losAngelesGomez-Rodriguez。 1人のデータ入力者がMariaGomezを入力するだけです。別の人がマリア・ゴメス・ロドリゲスに入るかもしれません。さらに別の人がマリアアンヘレスロドリガスに入るかもしれません。



    1. Visual Studio:ContextSwitchDeadlock

    2. SQLでゼロ除算エラーを回避するにはどうすればよいですか?

    3. REGEXPのMySQL最適化

    4. Postgres:多対多のリレーションテーブルで最小行数と最大行数を取得します