为何AWS AppSync中Elasticsearch搜索查询无返回结果?
我在AWS Amplify中按如下方式定义了数据模型:
type Report @model @searchable { id: ID! title: String! location: String! }
目前我可以正常创建数据项,也能通过列表查询接口获取数据,但无法通过搜索查询获取对应数据:

如上示意图所示,searchReports 接口返回空结果,但从 listReports 的返回结果可以看出,我已存在多条标题为 T 的Report数据。
排查方向与解决方法
- 异步同步延迟问题
@searchable注解的搜索能力依赖 DynamoDB 到 Amazon OpenSearch 的异步同步链路,该链路不属于实时同步,正常会有1-5分钟的延迟。刚创建的测试数据如果立刻调用搜索接口,会因为数据还未完成索引构建返回空结果,等待数分钟后重试即可验证是否是延迟导致的问题。 - 存量数据未迁移
如果是在已有数据模型上后续追加的@searchable配置,模型上线前写入的存量数据不会被自动同步到 OpenSearch 搜索索引中,需要按照官方同步流程手动触发存量数据导入索引的操作,才能被搜索接口检索到。 - 分词规则不匹配
OpenSearch 默认采用标准英文分词器,单字符的测试内容(如标题为T的数据)可能会被权重规则过滤,或是和查询语句的匹配模式不兼容。可以调整搜索语句为全文匹配模式替代精确术语匹配,也可以针对短文本字段配置自定义分词规则,降低短文本的过滤阈值。 - 同步链路异常
如果等待超过10分钟依然无法检索到新写入的数据,需要检查关联的OpenSearch服务索引状态、DynamoDB流触发器配置、同步Lambda的执行日志,排除同步链路报错导致的数据无法写入索引的问题。
内容的提问来源于stack exchange,提问作者MJBZA
相关产品推荐
相关产品推荐

