2012-07-01 6 views
5

私のデータストアに人のリストがあるとします。それぞれの人がは、次のフィールドがあり:人の検索を正しく構成するにはどうすればいいですか?

  • 姓(*)
  • 最初の名前
  • ミドルネーム
  • ID(*)
  • 運転免許証のID(*)
  • id(*)
  • 生年月日
  • 誕生
でマークされたフィールド(*)の

少なくともが存在している必要があり の場所。

ユーザーは同じフィールドリストを提供しています(そして、少なくとも(*)のフィールドのうちの1つがでなければなりません)。私は提供されたユーザーを検索する必要があります。しかし、すべてのフィールドを一致させる必要はありません。私は検索結果にどのように私が確信しているか、何らかの形でユーザーに表示する必要があります。ような何か:

  • idlast nameにマッチした人物(ユーザーが検索のためだけにこれらの2つのフィールドを提供する)場合は、その後、私は結果が(100%)が正しいことを確信しています。
  • 人物がidlast nameと一致する場合(データベース内の他のフィールドも提供されていますが、一致しなかった場合)、結果はほぼ60%で正しいと確信しています。
  • など

(数値は単なる一例として提供されている)

どのように私は、このような検索を整理することができますか?標準アルゴリズムはありますか?私はまた、データベースへの要求の数を最小限に抑えたいと思います。

P.S.私は、データベースの実際のフィールド値をユーザーに提供することはできません。

答えて

1

マッチの品質を判断するロジックがデータベースレイヤーで処理するには複雑すぎるように思えます。少なくとも1つの必須キーと一致するすべてのレコードを取得し、メモリ内のそれぞれの一致スコアを計算し、最高スコアを戻すことで、最高のパフォーマンスを得ると思います。あなたが共通のたくさんの非常に大規模なデータセットを持っている場合、これはパフォーマンス上の問題である可能性

SELECT * FROM users WHERE id = `the_id` OR last_name = `the_last_name`; 

:ユーザーが出産のID、姓と場所をご提供している場合たとえば、あなたのクエリは次のようになります私はあまりにも多くの衝突を見ないと思うでしょう。これはGAEの外のあなた自身のデータセットで確認できます。 ORANDに変更することで、すべての必須フィールドが一致しなければならない場合、より良いパフォーマンスを得ることもできます。

関連する問題