如何正确组织人的搜索?

时间:2012-07-01 14:25:06

标签: algorithm google-cloud-datastore

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

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

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

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

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

(数字仅作为示例提供)

我该如何组织搜索?有没有标准的算法?我还想尽量减少对数据库的请求数量。

P.S。我无法向用户提供数据库中的实际字段值。

1 个答案:

答案 0 :(得分:1)

听起来,确定匹配质量的逻辑太复杂,无法在数据库层处理。我认为通过检索与至少一个必需键匹配的所有记录,计算内存中每个记录的匹配分数,并返回最佳分数,您将获得最佳性能。例如,如果用户向您提供了ID,姓氏和出生地,您的查询将如下所示:

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

如果你有一个非常大的数据集,有很多常见的姓氏,这可能是一个性能问题,但我不希望看到太多的碰撞。您可以在GAE之外的自己的数据集上进行检查。如果通过将OR更改为AND,所有必填字段必须匹配,您也可以获得更好的效果。