为什么SOLR内置的_version_字段会被copyfield引用?
结论
这是Solr的预期行为,不属于配置或者运行异常。
原因说明
- Solr中
source="*"的copyField规则匹配范围是文档写入阶段所有存在的字段,既包含用户自定义的业务字段,也包含Solr内置的系统元字段,匹配逻辑和字段自身的indexed、stored属性无关 _version_是Solr用于实现乐观锁、版本控制的内置字段,会在文档写入时自动添加到文档的字段列表中,因此会被通配符规则命中,触发字段拷贝逻辑- Solr官方没有为copyField的通配符匹配做「内置字段、自定义字段隔离」的设计,你之前认为仅采集自定义字段的认知属于常见误解
修复方案
如果需要避免_version_被拷贝到_text_,可以采用以下两种方案:
- 放弃使用全量通配符规则,显式声明所有需要拷贝到
_text_的业务字段,示例配置如下:
{ "source":"title", "dest":"_text_" }, { "source":"content", "dest":"_text_" }, { "source":"summary", "dest":"_text_" }
- Solr 7.4及以上版本支持
copyField的排除规则,你可以直接在现有规则中添加_version_到排除列表:
{ "source":"*", "dest":"_text_", "exclude": ["_version_"] }
内容的提问来源于stack exchange,提问作者Antje Janosch
相关产品推荐
相关产品推荐

