Solr提示缺少唯一键id,但该字段实际已存在
问题描述
我了解已有许多关于缺失uniqueId的相关帖子,但在我的场景中,该字段并未缺失。我通过curl发送给Solr的请求代码如下:
http://solr.xxxxxxxxx.com:8983/solr/email/update/extract?commit=true&** *%26literal.archive_id_s%3D1690134 %26literal.attachment_id_s%3D2102500%26literal.base_name_s %3D6658a301ea80b_28d248343289759_primal.mail.txt %26literal.created_at_dt%3D2024-05- 30T12%3Dasxxxxxx%40xxxxxxxxxxxxxxxxxxxx.com" -F "myfile=@/email_archive/attachments/2024/5/30/6658a301ea80b_28d2483432 89759_primal.mail.txt"
我已在上述代码中标记出id字段,但仍收到如下错误:
{ "responseHeader":{ "status":400, "QTime":1}, "error":{ "metadata":[ "error-class","org.apache.solr.common.SolrException", "root-error-class","org.apache.solr.common.SolrException"], "msg":"Document is missing mandatory uniqueKey field: id", "code":400}}
我已检查schema.xml未发现异常,恳请各位提供解决建议。
排查与解决建议
修正curl命令格式错误
你提供的命令存在多处格式问题,直接导致参数无法被Solr正确解析:- URL中的
** *是无效干扰字符,需删除 - 参数混用了未转义的
&和转义后的%26,直接用&分隔参数即可(curl会自动处理URL编码) created_at_dt参数值被错误拼接,需修正为合法的ISO时间格式(如2024-05-30T12:00:00Z)
- URL中的
显式传递
id字段
从现有命令中未看到明确的literal.id参数——Solr要求的uniqueKey字段是id,而非你设置的archive_id_s或其他字段。必须显式添加该参数,示例修正后的命令:curl "http://solr.xxxxxxxxx.com:8983/solr/email/update/extract?commit=true&literal.id=你的唯一ID值&literal.archive_id_s=1690134&literal.attachment_id_s=2102500&literal.base_name_s=6658a301ea80b_28d248343289759_primal.mail.txt&literal.created_at_dt=2024-05-30T12:00:00Z" -F "myfile=@/email_archive/attachments/2024/5/30/6658a301ea80b_28d248343289759_primal.mail.txt"再次验证schema配置
确认schema.xml中uniqueKey的配置确实指向id,且字段定义合法:<uniqueKey>id</uniqueKey> <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>用极简请求测试
先发送不含额外参数的测试请求,排除其他变量干扰:curl "http://solr.xxxxxxxxx.com:8983/solr/email/update/extract?commit=true&literal.id=test_unique_id" -F "myfile=@/path/to/test-file.txt"若请求成功,再逐步添加其他参数,定位可能的问题点。
内容的提问来源于stack exchange,提问作者Warren H. Prince
相关产品推荐
相关产品推荐

