ElasticSearch中非对象类型字段配置enabled:false及字节类型字段配置报错的技术咨询
ElasticSearch中非对象类型字段配置enabled:false及字节类型字段配置报错的技术咨询
兄弟,我太懂你现在的困惑了——你想给那个不需要搜索的字节数组字段设置禁用索引,同时用byte类型来节省存储空间,但配置"enabled":false后却触发了报错对吧?
其实问题出在ElasticSearch的参数规则上:enabled这个参数只对object类型的字段生效,像byte这种基础数据类型根本不支持这个配置项,所以才会抛出mapper_parsing_exception,提示你这个参数对byte类型的字段是未知的。
那该怎么满足你的需求呢?给你两个适配的解决方案:
如果你只是想禁用该字段的搜索能力,同时保留
byte类型来节省空间,直接把enabled:false换成index:false就可以了。这个参数是专门给基础数据类型用来关闭索引的,配置如下:"colbert_b": {"type": "byte", "index": false}这样设置后,这个字段既会以
byte类型存储(最大程度节省空间),又无法被用于任何搜索操作,完全契合你的需求。如果你要存储的是字节数组(也就是多个
byte值的集合),也不用额外声明数组类型——ElasticSearch天然支持数组格式的数据,只要你传入的是数组形式的值,上面的配置同样能生效,它会自动把字段处理成byte类型的数组。
再给你补个小知识点:enabled:false的作用是让整个object类型字段不被解析、不生成任何索引,但基础类型本身没有子字段结构,这个参数对它们来说根本没有存在的意义,所以ES直接拒绝了这个配置~
备注:内容来源于stack exchange,提问作者Miguel




