【问题标题】:Search dynamoDB using more than one attribute使用多个属性搜索 dynamoDB
【发布时间】:2018-08-17 01:56:09
【问题描述】:

我在这个网站上的几个人的帮助下创建了一项技能。

我有一个数据库,我想做的是让 Alexa 从我的数据库中调用数据。 IE。通过询问某个日期的电影

我目前遇到的问题是我已经定义了我的分区键,它适用于我表中的一个项目,并且会读取该特定键的消息,但我搜索的任何其他内容都会给我相同的响应作为一项有效的项目。关于如何克服这个问题的任何想法?

这是我定义表格的方式:

let handleCinemaIntent = (context, callback) => {    
  let params = {
    TableName: "cinema",
    Key: {
        date: "2018-01-04",
    }
  };

顺便说一句,我的分区键中会重复相同的日期,据我所知,分区键需要是唯一的;所以我需要克服这个。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb alexa-skills-kit


    【解决方案1】:

    您有几个选项可用于构建 DynamoDB 表,但我认为最直接的方法如下:

    您可以使用“日期”的分区键(就像您现在拥有的那样)设置您的表,也可以使用sort key 这将是电影名称或其他标识符。这样,您可以在一个分区键下拥有特定日期的所有电影,并使用 Query 操作(与您一直使用的 GetItem 相对)查询它们。但是,您将无法修改现有表以添加排序键,因此您必须删除现有表并使用不同的架构重新创建它。

    由于通常每天的电影数量相当有限,假设您总是按天查询,这种分区方案应该工作得很好。如果您只需要通过电影名称搜索(即“给我这部电影的上映日期”),就会出现这种情况。如果您需要后者,那么您可以创建一个 GSI,其中主键是电影名称,范围键是日期。

    但是,您应该暂停片刻,考虑一下 DynamoDB 是否适合您的需求。我这样说是因为 Dynamo 非常擅长访问模式,在这些模式中您确切知道要搜索的内容并且需要能够水平扩展。而您的用例更多的是模糊搜索。

    作为 Dynamo 的替代方案,您可以考虑设置一个 ElasticSearch 集群并将您的电影数据放入其中。然后,您可以非常简单地运行查询,例如“今天将上映哪些电影”,或“这部电影将在哪几天上映”,或“本周将上映哪些电影”,或“今年春天将上映哪些动作片”,“今天在播放什么动画电影”,“我附近正在播放什么电影”

    【讨论】:

    • 感谢您的回复,您有我如何设置弹性搜索集群的链接吗?因为我打算使用这种类似的模型进行更多与电影无关的模糊搜索
    • 请确保您阅读了有关设置 ElasticSearch 集群的内容,这不是一件容易的事。此外,AWS 提供的托管集群通常被认为是地球上最差的 EC 集群,因此,如果您想要轻松并有一些钱,请使用 AWS 市场的 Elastic Cloud 产品。
    • @zuba - 这是一个链接,可让您在 AWS 上开始使用简单的 ElasticSearch 集群。 SDM 是正确的,ElasticSearch 不像 DynamoDB看似简单,但也没有那么困难(DynamoDB 也不是小菜一碟,虽然乍一看很容易)
    • @zuba,这里也是 NodeJS 官方 ElasticSearch 客户端的链接:github.com/elastic/elasticsearch-js
    • @Mike-Dinescu 谢谢你们,我今天会复习一下。在我这样做之前,您能否帮我设置我的参数,以便我使用 dynamo db 表的技能(因为我宁愿有一些可以工作的东西)
    猜你喜欢
    • 2016-07-30
    • 2012-12-05
    • 1970-01-01
    • 2012-08-02
    • 2014-11-02
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多