【问题标题】:Index DynamoDB streams to elastic search将 DynamoDB 流索引到弹性搜索
【发布时间】:2021-03-18 22:29:16
【问题描述】:

我需要在 DynamoDB 表中实现以下实体

我已将这些实体存储在 DynamoDB 中,如下所示。

  • 分区键:PROJ#ProjectId:CountryId
  • 排序键:项目名称
  • 公司:公司数据为 JSON 文档

由于这是一对多的关系,同一公司的 N 个项目将创建 N 个项目记录,并且同一公司的详细信息将存储在其公司属性中。这样做的原因是,最关键的数据访问点是通过 ProjectId 和 CountryId(假设我无法更改此 DB 设计)

我需要实现一个支持使用公司名称、地址、项目名称、国家等过滤表的搜索功能(使用单个过滤器或这些过滤器的任意组合)。我正在使用 DynamoDB 流来提供弹性搜索集群并更新那里的任何创建、删除或更新详细信息,并使用弹性搜索 API 来查询数据。

但我需要将这些数据按以下格式编入索引,这样当我收到弹性搜索的详细信息时,数据不会重复

{
    "id" : 1
    "name" : "ABC",
    "description" : "description",
    "address" : "address",
    "projects" : [
        {
            "id" : 10,
            "name" : "project 1",
            "countryId" : 10
        },
        {
            "id" : 20,
            "name" : "project 1",
            "countryId" : 10
        }
    ]
}

在创建记录时,由于 Project 记录是作为单个记录创建的,是否有任何推荐或标准的方法可以获取 Company 的所有项目记录和创建上面的json文档并在elasticsearch中建立索引?

【问题讨论】:

  • 我建议使用带有公司 ID 的 GSI,因此当您发出查询时,您会传递公司 ID 并获取与公司相关的所有记录。

标签: elasticsearch amazon-dynamodb amazon-dynamodb-streams


【解决方案1】:

这就是我的处理方式:

  1. 在弹性中,文档 ID 将是公司 ID
  2. 您可以做的是创建一个基于更改流触发的 lambda,并使用弹性的 update by query 来查询文档并使用 PAINLESS 脚本来更新文档的项目部分,这将适用于不太频繁的更改。

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2016-05-20
    相关资源
    最近更新 更多