#elasticsearch #amazon-dynamodb #amazon-dynamodb-streams
#elasticsearch #amazon-dynamodb #amazon-dynamodb-streams
Вопрос:
У меня есть требование для реализации следующих объектов в таблице DynamoDB
Я сохранил эти объекты в DynamoDB, как показано ниже.
- Ключ раздела: PROJ #Идентификатор проекта: идентификатор страны
- Ключ сортировки: название проекта
- Компания: данные компании в виде документа JSON
Поскольку это отношение «один ко многим», N количество проектов одной и той же компании создаст N количество записей проекта, и в их атрибуте Company будут сохранены одинаковые сведения о компании. Причина этого заключается в том, что наиболее важная точка доступа к данным находится через ProjectID и CountryId (предположим, что я не могу изменить этот дизайн БД)
У меня есть требование реализовать функцию поиска, которая поддерживает таблицу фильтров с использованием названия компании, адреса, названия проекта, страны и т.д. (с использованием одного фильтра или любой комбинации этих фильтров). Я использую потоки DynamoDB для подачи в кластер эластичного поиска и обновления любых созданных, удаленных или обновленных там сведений и использую API эластичного поиска для запроса данных.
Но мне нужно проиндексировать эти данные в следующем формате, чтобы при получении сведений из elastic search данные не дублировались
{
"id" : 1
"name" : "ABC",
"description" : "description",
"address" : "address",
"projects" : [
{
"id" : 10,
"name" : "project 1",
"countryId" : 10
},
{
"id" : 20,
"name" : "project 1",
"countryId" : 10
}
]
}
Во время создания записи, поскольку записи проекта создаются как отдельные записи, существует ли какой-либо рекомендуемый или стандартный способ, которым я могу захватить все записи проекта компании и создать приведенный выше документ json и проиндексировать его в эластичном поиске?
Комментарии:
1. Я бы рекомендовал использовать GSI с идентификатором компании, поэтому, когда вы отправляете запрос, вы передаете идентификатор компании и получаете все записи, связанные с компанией.
Ответ №1:
Вот как я бы подошел к этому вопросу :
- В elastic идентификатором документа будет идентификатор компании
- Что вы можете сделать, так это создать лямбда-выражение, которое запускается на основе потоков изменений, и использовать обновление по запросу elastic для запроса документа и БЕЗБОЛЕЗНЕННЫХ сценариев для обновления раздела проекта документа, это будет работать для менее частых изменений.