我需要在dynamodb表中实现以下实体
我将这些实体存储在dynamodb中,如下所示。
分区键:proj#projectid:countryid
排序键:项目名称
公司:公司数据作为json文档
由于这是一对多关系,同一公司的n个项目将创建n个项目记录,并且同一公司的详细信息将存储在其公司属性中。这样做的原因是,最关键的数据访问点是通过projectid和countryid(假设我不能更改这个db设计)
我需要实现一个搜索功能,它支持使用公司名称、地址、项目名称、国家等筛选表(使用单个筛选或这些筛选的任意组合)。我使用dynamodb streams为ElasticSearch集群提供信息,并更新那里的任何创建、删除或更新的细节,并使用ElasticSearchapi查询数据。
但是我需要用以下格式索引这些数据,这样当我从ElasticSearch接收到详细信息时,数据就不会被复制
{
"id" : 1
"name" : "ABC",
"description" : "description",
"address" : "address",
"projects" : [
{
"id" : 10,
"name" : "project 1",
"countryId" : 10
},
{
"id" : 20,
"name" : "project 1",
"countryId" : 10
}
]
}
在记录创建时,由于项目记录是作为单个记录创建的,是否有任何推荐的或标准的方法可以抓取公司的所有项目记录并创建上面的json文档并在ElasticSearch中对其进行索引?
1条答案
按热度按时间uurity8g1#
我会这样做:
在弹性体中,文档id将是companyid
您可以创建一个基于更改流触发的lambda,并使用elastic的updateby query来查询文档,使用无痛脚本来更新文档的项目部分,这将适用于不太频繁的更改。