Для ясности, вы храните родительские и дочерние элементы в одной таблице и хотите, чтобы индекс в таблице содержал только дочерние элементы?Это правильное представление вашей проблемы?
Если вы не хотите, чтобы все данные в таблице DynamoDB были в индексе, вам необходимо создать разреженный индекс , который являетсяобычный индекс, где атрибуты, указанные для ключей хеша и диапазона индекса, НЕ присутствуют в каждом элементе таблицы.Ваша проблема в том, что ваши атрибуты indexHashKey и indexRangeKey находятся на ВСЕХ ваших родительских и дочерних элементах, поэтому все они отображаются в вашем индексе.Помните, что элементы в таблице DynamoDB могут иметь разные атрибуты;как минимум, они должны содержать хеш-ключ таблицы и ключ сортировки (если таковой имеется в таблице), но им не нужно содержать атрибуты, которые оказываются ключами для любого индекса, присоединенного к таблице.
Подумайте о том, чтобы изменить ваши элементы так, чтобы они включали только атрибуты хеш-индекса и ключа диапазона в родительские элементы.Например:
parent item:
{
"hashKey":"a1"
"parentIndexHashKey":"parentType"
"parentIndexRangeKey":"date1"
}
Затем вы можете выполнить запрос по этому индексу по родительскому типу (например, parentType == "parentType2") и вернуть только родительские элементы в этой таблице с этим типом.
Если вам также необходимо выполнить аналогичный запрос только для дочерних элементов, вы можете создать второй разреженный индекс, который имеет только дочерние элементы, задав атрибуты для хеша этого индекса и ключи сортировки только для дочерних элементов.
child item:
{
"hashKey":"a2"
"childIndexHashKey":"childType"
"childIndexRangeKey":"date11"
}
Кроме того, вы можете хранить родительские и дочерние элементы в отдельных таблицах DynamoDB, чтобы дочерние элементы не могли попасть в родительский индекс и мешать вашим запросам.