Solr 8.11索引自定义JSON时split参数未生效未拆分独立文档
问题排查结论
你的配置存在两处核心错误,直接导致split按数组拆文档的逻辑失效:
- 卡片内部字段的映射路径写错了。当指定
split=/cards按cards数组拆分文档时,每个被拆分出来的卡片对象就是当前子文档的根节点,卡片内的字段直接映射/title、/text这类子文档根路径即可。你现在写的/cards/title是从原始JSON的根节点遍历所有cards下的title值,Solr会把遍历到的所有值聚合到同一个字段里,自然就变成了多值数组,也不会触发拆分。 - 没有配置唯一主键
id的生成规则。Solr要求所有入库文档必须有唯一id,你当前的映射完全没处理id字段,就算拆分逻辑触发,也会因为主键缺失/重复把多个卡片合并成单条文档。
修正后的请求配置
把你的提交参数替换为以下内容即可:
curl -X POST 'http://<你的Solr服务地址>/<你的索引核心名>/update/json/docs?split=/cards&commitWithin=1000&f=dict:/dict&f=index_language:/index_language&f=contents_language:/contents_language&f=lang:/lang&f=type:/type&f=words_count:/words_count&f=id:UUID()&f=title:/title&f=title_index:/title_index&f=text:/text&f=text_index:/text_index&overwrite=true&wt=json' \ -H 'Content-type:application/json' \ --data-binary @<你的本地JSON源文件路径>
配置说明
- 拆分逻辑触发后,外层的dict、lang这类公共字段会自动从原始JSON的根节点继承到每个子文档里,不需要额外做特殊映射
f=id:UUID()会给每个拆分出来的卡片文档自动生成全局唯一的主键,避免文档合并。如果需要业务可读的主键,也可以替换成拼接规则,比如f=id:concat(/dict,'_',/title_index),用词典名+词条索引名拼接唯一id- 不需要额外修改现有schema配置,你当前的schema字段定义完全可以满足需求
提交后就能得到你预期的3条独立文档,每条文档的title、text都是单值,且携带全部外层公共字段。
内容的提问来源于stack exchange,提问作者DrugojAndrew
相关产品推荐
相关产品推荐

