如何通过Solr Cell在单个请求中同时索引PDF文档及关联JSON元数据
如何通过Solr Cell在单个请求中同时索引PDF文档及关联JSON元数据
当然可以实现!Solr Cell(也就是我们常说的ExtractingRequestHandler)完全支持在单个请求里同时上传二进制PDF文件,并且附加自定义的JSON元数据,完美匹配你的需求。
核心实现思路
你只需要发送一个multipart/form-data格式的POST请求,其中包含两部分内容:
- 二进制的PDF文件
- 带有
literal.前缀的表单参数,用来传递你的JSON元数据(Solr会直接将这些值存入对应字段,不会被文本提取器处理)
具体示例(用curl命令)
假设你的Solr实例运行在localhost:8983,目标集合是your-collection,PDF路径是./sample.pdf,JSON元数据里的author是Jane Smith,source是Company Annual Report,还需要给文档指定一个唯一IDpdf-doc-001,可以用下面的命令:
curl -X POST "http://localhost:8983/solr/your-collection/update/extract?commit=true" \ -F "file=@./sample.pdf" \ -F "literal.author=Jane Smith" \ -F "literal.source=Company Annual Report" \ -F "literal.id=pdf-doc-001"
针对JSON文件的处理方式
如果你的元数据是保存在一个JSON文件(比如metadata.json)里,内容如下:
{ "author": "Jane Smith", "source": "Company Annual Report" }
可以用jq工具提取字段值,再传递给Solr,命令如下:
curl -X POST "http://localhost:8983/solr/your-collection/update/extract?commit=true" \ -F "file=@./sample.pdf" \ -F "literal.author=$(cat ./metadata.json | jq -r '.author')" \ -F "literal.source=$(cat ./metadata.json | jq -r '.source')" \ -F "literal.id=pdf-doc-001"
关键说明
- 字段映射:正如你已经在schema中定义的,
content字段会自动被Solr Cell填充为从PDF中提取的文本内容;而author、source字段则会被你通过literal.参数传入的值填充。 commit=true参数:这个参数会让Solr立即提交索引,测试时非常方便,生产环境建议批量处理后再手动提交,提升性能。- ID字段:必须指定
literal.id给文档一个唯一标识,否则Solr会自动生成随机ID,不利于后续的文档更新或查询。
可视化工具操作(比如Postman)
如果你习惯用可视化工具,步骤也很简单:
- 选择POST请求,URL填
http://localhost:8983/solr/your-collection/update/extract?commit=true - 请求体选择
form-data - 添加一个文件类型的键(比如
file),选择你的PDF文件 - 添加几个文本类型的键:
literal.author、literal.source、literal.id,分别填入对应的值 - 发送请求即可完成索引
备注:内容来源于stack exchange,提问作者lenchester
相关产品推荐
相关产品推荐

