You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DynamoDB中实现无需OpenSearch的简易产品搜索功能

DynamoDB 轻量模糊检索实现方案

DynamoDB 原生没有支持全列任意子串检索的能力,确实没法直接对标 SQL 里的%LIKE%语法,但可以根据你的实际检索场景,选择以下不用全表扫描、也不用引入 OpenSearch 的低成本方案:

方案1:前缀/后缀固定的检索场景

如果你的模糊检索不是任意位置的子串,只是前缀匹配(比如搜索产品名以「华为」开头的商品),或者后缀匹配(比如搜索文件后缀为.xlsx的附件),可以直接用索引优化:

  • 前缀匹配:把需要检索的字段设为排序键(SK),查询时用begins_with()运算符即可直接走索引,成本和普通主键查询一致
  • 后缀匹配:写入数据时额外把字段值反转存入单独列,比如把product_name = "无线蓝牙耳机"反转后存为product_name_reverse = "机牙耳线蓝无",查询时把搜索词也反转,再用begins_with()查反转后的字段即可

方案2:少量固定列的任意子串检索

如果你只需要对2-3个核心列(比如产品名、品牌、分类)做任意子串检索,且数据量级在100万以内,可以手动实现n-gram倒排索引:

  • 写入主产品表时,同步把需要检索的字段拆分为2-gram/3-gram分词(比如「无线耳机」拆分为["无线", "线耳", "耳机"]),每个分词作为单独的倒排索引表的分区键,关联对应产品ID
  • 查询时把搜索词拆成同样粒度的分词,去倒排索引表查询匹配的产品ID,去重后再回主表拉取完整产品信息即可,全程走主键查询,无全表扫描,额外存储成本极低

方案3:固定关键词检索场景

如果你的检索需求是固定的关键词匹配,不是随机字符组合的子串,提前把所有可能的检索关键词提取出来,存入单独的列并创建全局二级索引(GSI),查询时直接匹配GSI的分区键即可。

注意:以上方案都只适合检索场景固定的轻量应用,如果你的需求是跨10个以上字段的任意随机子串检索、数据量超过百万,DynamoDB本身的设计定位并不适配这类场景,强行实现的后期维护成本反而会高于引入OpenSearch的成本。


内容的提问来源于stack exchange,提问作者Joseph Erblich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:06:03