我有一个包含大量数据的JSON。现在所有字段每次都没有固定类型的数据。例如,某些Ids
有时会显示为完整整数,例如123
,但有时会显示为String
,如a123
。
默认情况下,index.mapper.dynamic
为true
。因此,类型映射会根据第一次收到的数据自动定义,以便为(While creating the index for first set of JSON data)
编制索引。现在让我们说,我的第一组数据的Id
值为123
,因此Id
的类型被映射为Integer
。因此,当某些数据Id
为String
时,如a123
,那么它会抛出异常,因为该类型已映射到Integer
。
我们可以将index.mapper.dynamic: false
放入elasticsearch.yml
来关闭动态类型映射。但它会禁用所有字段的类型映射。我希望Partial Type Mapping
。对于某些字段,例如date
,我希望以特定格式显示datetime
的类型映射。
所以我的目标是仅为少数JSON数据字段实现类型映射。因此,如果JSON中有20个字段,我会为4个字段的类型而烦恼,对于其他16个字段,如果它们被视为字符串,我就可以了。
有什么方法可以实现这种部分类型映射吗?我正在使用Java客户端。
答案 0 :(得分:1)
简短回答 - 不。
更长一点 - ElasticSearch不是架构 - 它是动态的。这意味着每个字段都有一个类型,但这种类型不需要提前指定,但可以根据遇到的第一个值动态确定。 但同样 - 没有没有映射的字段。您不能拥有包含不同类型值的字段。 如果这是您必须拥有的东西,您只需将此字段的所有值转换为字符串即可。