ElasticSearch中的部分类型映射

时间:2013-10-21 12:11:48

标签: java json elasticsearch

我有一个包含大量数据的JSON。现在所有字段每次都没有固定类型的数据。例如,某些Ids有时会显示为完整整数,例如123,但有时会显示为String,如a123

默认情况下,index.mapper.dynamictrue。因此,类型映射会根据第一次收到的数据自动定义,以便为(While creating the index for first set of JSON data)编制索引。现在让我们说,我的第一组数据的Id值为123,因此Id的类型被映射为Integer。因此,当某些数据IdString时,如a123,那么它会抛出异常,因为该类型已映射到Integer

我们可以将index.mapper.dynamic: false放入elasticsearch.yml来关闭动态类型映射。但它会禁用所有字段的类型映射。我希望Partial Type Mapping。对于某些字段,例如date,我希望以特定格式显示datetime的类型映射。

所以我的目标是仅为少数JSON数据字段实现类型映射。因此,如果JSON中有20个字段,我会为4个字段的类型而烦恼,对于其他16个字段,如果它们被视为字符串,我就可以了。

有什么方法可以实现这种部分类型映射吗?我正在使用Java客户端。

1 个答案:

答案 0 :(得分:1)

简短回答 - 不。

更长一点 - ElasticSearch不是架构 - 它是动态的。这意味着每个字段都有一个类型,但这种类型不需要提前指定,但可以根据遇到的第一个值动态确定。 但同样 - 没有没有映射的字段。您不能拥有包含不同类型值的字段。 如果这是您必须拥有的东西,您只需将此字段的所有值转换为字符串即可。