Kendra+S3连接器无法索引PDF文件:元数据验证失败问题求助
我完全懂你现在的困扰——明明照着格式写了S3元数据JSON,配置好了Kendra自定义字段,点同步却一堆元数据验证失败的报错,重复刷着“instance failed to match at least one required schema among 4”,属实让人头大。结合Kendra S3连接器的常见坑,我给你梳理几个大概率的问题点和排查步骤:
可能的问题原因及排查方向
字段名/类型与Kendra索引不匹配(最常见)
Kendra对自定义字段的匹配是大小写敏感的,而且数据类型必须严格对应:- 比如你在Kendra索引里创建的
asset_id是字符串类型,那元数据里的"asset_id":"100000241"没问题,但如果写成数字"asset_id":100000241就会报错; - 像
keywords这种数组类型,要确保Kendra里对应的字段设置为「可多值」的字符串类型; - 特别注意:你元数据里的
_source_uri是Kendra的内置预留字段,不需要手动在Attributes里定义(Kendra会自动从S3路径生成),手动添加反而会导致schema冲突,这很可能是报错的元凶之一,建议先删掉这个字段试试。
- 比如你在Kendra索引里创建的
元数据文件命名/位置错误
Kendra要求元数据文件必须和对应PDF同名且后缀为.metadata.json,还要放在同一个S3路径下。比如你的PDF是brochure.pdf,元数据文件必须叫brochure.pdf.metadata.json,如果命名错成brochure.metadata.json或者放在其他文件夹,Kendra就无法关联到文档,触发验证失败。JSON语法隐性错误
看起来你的JSON格式没问题,但可能存在一些隐性错误:比如asset_type和asset_subtype值后面多了个冒号("asset_type":"Brochure:"),虽然语法合法,但如果Kendra对字段内容有格式限制(比如不允许末尾冒号)也可能触发错误;另外可以用JSON校验工具检查有没有遗漏的逗号、不闭合的引号等。自定义字段配置问题
检查Kendra索引里的自定义字段是否正确配置:比如日期类型字段(date_published、expiration_date等)是否设置为「日期/时间」类型,而不是字符串类型;字段是否开启了「可索引」属性,否则Kendra无法识别该字段。
快速测试步骤
简化元数据做最小化测试
先写一个极简的元数据JSON,只保留核心字段和1-2个自定义字段,比如:{ "Title": "Test Brochure", "ContentType": "pdf", "Id": "test1001", "Attributes": { "asset_id": "test1001", "keywords": ["test", "demo"] } }同步测试,如果成功,再逐步添加其他字段,就能定位到是哪个字段导致的问题。
核对字段配置细节
把元数据里的每个Attributes字段,和Kendra索引的自定义字段列表逐一对比,确保字段名大小写、数据类型完全一致,没有拼写错误。检查元数据文件命名
确认元数据文件名严格遵循[PDF文件名].metadata.json的规则,和PDF在同一S3目录下。
按照这些步骤排查,应该能快速找到问题所在。
内容来源于stack exchange

