Полезно разделить две разные вещи, которые похожи друг на друга: запросы и поиск. Если вы хотите, чтобы ваш API предоставлял возможность запроса, то DynamoDB с парой GSI должен удовлетворять большинство ваших требований.
Если вы хотите, чтобы ваш API просто осуществлял поиск по множеству данных, то IMO уходит от стандартных баз данных в область поисковых систем, поэтому, возможно, стоит взглянуть на AWS CloudSearch или Elasticsearch, или что-то вроде Algolia , которые являются технологиями, специально разработанными для поиска.
Для дизайна DynamoDB я рекомендую это видео о продвинутых шаблонах проектирования: https://www.youtube.com/watch?v=HaEPXoXVf2k
Через 1-2 часа вы многое узнает об использовании DynamoDB, в том числе о том, как моделировать шаблоны реляционного доступа на нем. Примерно через 50 минут вы увидите большую примерную таблицу, из которой вы сможете собрать проектные решения для достижения определенного набора шаблонов доступа.
Как сказал @Michael - sqlbot, во-первых, вы должны рассмотреть возможность того, что DynamoDB - не правильный выбор.
Чтобы помочь вам с этим, я настоятельно рекомендую вам прочитать документацию (если вы этого еще не сделали). DynamoDB - очень мощная система баз данных NoSQL, но она также может быть очень сложной.
В таком простом случае вы сможете решить его без GSI. Имейте в виду, что использование GSI может подразумевать использование дополнительных WCU каждый раз, когда вы добавляете / обновляете / удаляете элемент в базовой таблице. И имейте в виду, что GSI в конечном итоге непротиворечивы, что может или не может быть проблемой, в зависимости от вашего случая.
Вы можете также рассмотреть другие решения NoSQL, такие как Cassandra, MongoDB, CouchDB и т. Д.