5

假设我的数据存储中有人员列表。那里的每个人可能有以下字段:

  • 姓 (*)
  • 中间名字
  • ID (*)
  • 驾驶执照号码 (*)
  • 另一个 ID (*)
  • 出生日期
  • 地区
  • 出生地

至少有一个标有 (*) 的字段必须存在。

现在用户向我提供了相同的字段列表(并且必须再次提供至少一个标有 (*) 的字段)。我应该搜索用户提供的人。但并非所有字段都应匹配。我应该以某种方式向用户显示我在搜索结果中的确定方式。就像是:

  • 如果人员与 and 匹配idlast name并且用户只提供了这两个字段进行搜索),那么我确信结果是正确的(100%);
  • 如果人员与 and 匹配idlast name并且用户提供了在数据库中找到但未匹配的其他字段),那么我确信结果几乎正确 60%;
  • 等等

(数字仅作为示例提供)

我怎样才能组织这样的搜索?有没有标准的算法?我还想尽量减少对数据库的请求数量。

PS 我无法为用户提供数据库中的实际字段值。

4

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 回答