这是我的情况:
我在哪里
我首先尝试使用listCaballos查询进行查询,将用户输入作为过滤器添加到查询中,然后递归使用nextToken遍历整个表(不使用二级索引),但是花了6分钟通过表并返回项目。
我知道二级索引有助于分区,然后通过选定的键对项目进行排序(这使速度很快),但是我读到,这迫使用户进行精确的搜索(而不是子字符串搜索),那不是我所需要的。
我听说弹性搜索可能会有所帮助。
有什么建议吗?
谢谢!
答案 0 :(得分:2)
您将无法使用二级索引来帮助创建(合理的)广义子字符串搜索。
有很多方法可以解决您的问题。在这里,我介绍其中的一些,但这绝不是详尽的。
DynamoDB-> CloudSearch
CloudSearch可以为您的数据提供常规搜索功能。基本上,您可以将lambda函数从表连接到DynamoDB流。该lambda函数可以使您的CloudSearch域保持最新状态。 Here是此过程的概述。
CloudSearch
您可以放弃DynamoDB并将此数据存储在CloudSearch中。这消除了对lambda函数的需要,这意味着您的数据仅存储在一个地方。但是,您需要忍受更长的时间来保持一致性,因为CloudSearch没有像DynamoDB这样的强一致性读取。
RDS
您可以只使用某种SQL数据库。它们中的大多数都支持全文搜索。如果您不想管理数据库实例,甚至可以使用AWS Aurora Serverless。
答案 1 :(得分:2)
这在DynamoDB中效率不高。尽管您可以创建二级索引来搜索'begins_with',但子字符串('contains')功能仅适用于在大型数据集中效率不高的过滤器(因为DynamoDB将使用IOPS查询所有内容,然后应用过滤器)。 / p>
这种要求,使用AWS ElasticSearch或CloudSearch之类的其他服务为数据库建立索引非常有效,这样您就可以在该服务之上应用查询并配置连续索引。
入门