2012-07-01 53 views
5

比方說,我有我的數據存儲中的人員列表。每個人有可能具有以下字段:如何正確組織搜索人員?

  • 姓氏(*)
  • 名字
  • 中間名
  • ID(*)
  • 駕駛執照ID(*)
  • 另一個ID(*)
  • 出生日期
  • 區域
  • 出生地

至少一個字段的的標有(*)必須存在。

現在用戶爲我提供了相同的字段列表(並且至少需要提供一個標有(*)的字段)。我應該搜索提供的用戶。但不是所有的領域都應該匹配。我應該以某種方式向用戶展示我如何確定搜索結果。喜歡的東西:

  • 如果人通過idlast name(以及用戶提供的不僅僅是這些2場爲搜索)匹配,那麼我相信結果是正確的(100%);
  • 如果有人通過idlast name(以及用戶提供的其他字段,在數據庫中找到但未匹配)匹配,那麼我相信結果幾乎是正確的60%;

(數字只提供了爲例)

我怎麼能組織這樣的搜索?有沒有標準算法?我也想盡量減少對數據庫的請求數量。

P.S.我無法爲用戶提供數據庫中的實際字段值。

回答

1

這聽起來像確定匹配質量的邏輯太複雜了,無法在數據庫層處理。我認爲,通過檢索與至少一個強制性關鍵字匹配的所有記錄,計算每個記憶中的每個記錄的匹配分數並返回最佳分數,您將獲得最佳表現。例如,如果用戶提供了一個ID,姓氏和出生地點,查詢看起來是這樣的:

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

,如果你有很多的共同的一個非常大的數據集這可能是一個性能問題最後的名字,但我不希望看到太多的碰撞。您可以在GAE之外的自己的數據集上檢查這一點。如果通過將OR更改爲AND,所有必填字段必須匹配,您也可以獲得更好的性能。