5

私のデータストアに人のリストがあるとしましょう。そこにいる各人には、次のフィールドがある場合があります。

  • 苗字 (*)
  • ファーストネーム
  • ミドルネーム
  • ID (*)
  • 運転免許証(※)
  • 別のID (*)
  • 生年月日
  • 領域
  • 出生地

(*) でマークされたフィールドの少なくとも1 つが存在する必要があります。

ここで、ユーザーは同じフィールドのリストを提供してくれます (また、(*) でマークされたフィールドの少なくとも1 つを提供する必要があります)。ユーザーが提供した人物を検索する必要があります。ただし、すべてのフィールドが一致する必要はありません。検索結果で、どうにかしてユーザーに確信を持って表示する必要があります。何かのようなもの:

  • id人がand に一致した場合last name(およびユーザーが検索用にこれら 2 つのフィールドのみを提供した場合)、結果は正しい (100%) と確信しています。
  • 人物がidand に一致した場合last name(およびユーザーがデータベースで見つかったが一致しなかった他のフィールドを提供した場合)、結果は 60% ほぼ正しいと確信しています。

(数値は例として提供されています)

そのような検索をどのように整理できますか? 標準アルゴリズムはありますか?また、データベースへのリクエスト数を最小限に抑えたいと考えています。

PS データベースからの実際のフィールド値をユーザーに提供することはできません。

4

1 に答える 1

1

一致の質を判断するためのロジックが複雑すぎて、データベース層で処理できないようです。必須キーの少なくとも 1 つに一致するすべてのレコードを取得し、メモリ内の各キーの一致スコアを計算し、最高のスコアを返すことで、最高のパフォーマンスが得られると思います。たとえば、ユーザーが ID、姓、出生地を提供した場合、クエリは次のようになります。

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

これは、一般的な姓が多数含まれる非常に大きなデータセットがある場合、パフォーマンスの問題になる可能性がありますが、それ以外の場合は、衝突があまり発生しないと予想されます。これは、GAE 以外の独自のデータセットで確認できます。ORを に変更することで、すべての必須フィールドが一致しなければならない場合にも、パフォーマンスが向上する可能性がありますAND

于 2012-07-02T18:47:55.847 に答える