代码之家  ›  专栏  ›  技术社区  ›  J86

DynamoDB建模:查找与各种实体属性匹配搜索词的所有实体

  •  0
  • J86  · 技术社区  · 3 年前

    我是DynamoDB和NoSQL世界的新手,尽管我已经购买并阅读了Alex DeBrie的DynamoDB书,但我仍然无法理解这一点。

    场景:

    我想用你按下的“酷”搜索创建一个应用程序 Ctrl + K 获得一个搜索模态,在搜索模态中,你可以键入任何内容,它会显示你的匹配项。看见 TailwindCSS's doc page 例如。

    我的实体是 Organisation Customer 他们之间有一种一对多的关系。一个组织有许多客户。

    如果这是SQL,我会想象自己是这样的:

    SELECT
      *
    FROM customers c
    WHERE c.id LIKE '%search-term%'
    OR c.first_name LIKE '%search-term%'
    OR c.last_name LIKE '%search-term%'
    OR c.date_of_birth LIKE '%search-term%'
    OR c.phone_number LIKE '%search-term%'
    OR c.post_code LIKE '%search-term%'
    

    但在DynamoDB中,我不确定如何获得相同的功能。

    当前型号:

    到目前为止,我有以下内容:

    data model

    这只允许我搜索 客户Id

    有用信息:

    一个组织可能有数千名客户,但假设平均而言,一个组织将有5万名客户,其中15K将是活跃的(即应在搜索中出现),非活跃的客户不应出现在搜索中,除非有要求。

    我听到你问,用户将如何请求?我会有一些信息文本,上面写着:

    放置 * 在搜索词前面还可以搜索不活跃的客户。

    例如,最常见的客户查找方式是按名称查找 A Watson ,但他们当然也可以通过邮政编码进行搜索,例如。 ls11 3fd (可以是小写或大写)。

    我确实想搜索的属性是:

    • 客户Id
    • 客户名字
    • 客户姓氏
    • 客户出生日期
    • 客户电话号码
    • 客户邮编

    客户实体将有20到30个属性,但为了搜索模式的目的,返回的结果将只有名字、姓氏、出生日期、指定的客户代表以及地址和邮政编码的第一行(因此有6个属性)。

    到目前为止的想法:

    1. 为我想要搜索的每个属性创建一个GSI(在我的例子中是5个GSI)。
    2. 创建自己的索引。将客户添加到应用程序时,我插入 pk search#org#1 以及 sk byfirstname#Ray ,然后是我想要的其他属性,然后是具有相同属性的另一项 pk 但这次 sk bylastname#Charles 等等

    对于选项2,我必须记住在实体更新时更新项,我可以通过DynamoDB流和lambda调用来完成。

    若我选择这个选项,我真的不确定我的DynamoDB查询会是什么样子!

    在给出上述信息的情况下,我如何对表格进行建模?

    0 回复  |  直到 3 年前
    推荐文章