Solr POST导入含\N空值TSV时提示Error adding field报错
问题根因
报错触发的核心原因有两个:
- Schema配置写错:你之前添加的是
<fieldType>(字段类型定义标签),不是实际字段映射的<field>标签,原有绑定到整数类型的seasonNumber、episodeNumber字段配置根本没有被修改,所以你加的配置完全不生效。 - TSV导入规则不匹配空值标记:Solr自带的CSV/TSV导入处理器默认仅将空字符串识别为空值,你数据集里用
\N标记的空值会被当做普通字符串传入整数字段,直接触发NumberFormatException。
解决方案
按以下步骤操作即可修复:
1. 修正Schema配置
不建议把两个整数类字段改成TextField,会丢失数值排序、范围查询的能力,先删除之前错误添加的两个同名fieldType配置,添加正确的字段映射配置:
<!-- 使用pint(整数点字段)类型,按需调整stored、indexed属性即可 --> <field name="seasonNumber" type="pint" stored="true" indexed="true"/> <field name="episodeNumber" type="pint" stored="true" indexed="true"/>
配置修改完成后,重载对应Solr core/collection或者直接重启Solr,让新配置生效。
2. 调整导入命令适配空值规则
在导入参数中添加字段空值映射规则,让Solr自动将\N识别为空值,修改后的导入命令如下:
./post -c imdb -host *hostname* -params "separator=%09&f.seasonNumber.null=\N&f.episodeNumber.null=\N&escape=\\" -type text/csv ~/imdb-dataset/title.episode.tsv
参数说明:
f.<字段名>.null=\N:指定对应字段遇到值为\N时,直接按空值处理,不会传入字符串触发类型转换错误escape=\\:指定反斜杠为转义字符,避免\N中的反斜杠被默认解析规则转义导致匹配失败
可选替代方案:预处理源文件
如果不想调整导入参数,也可以先对TSV文件做预处理,将所有独立的\N空值标记替换为空字符串再导入,预处理命令参考:
# 执行前务必备份原数据集,避免数据误改 sed -i.bak 's/\t\\\N\t/\t\t/g' ~/imdb-dataset/title.episode.tsv
预处理完成后用你原来的导入命令执行即可。
内容的提问来源于stack exchange,提问作者Prav
相关产品推荐
相关产品推荐

