2013-10-21 62 views
1

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

默认情况下,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个字段被认为是String,那么我也可以。

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

回答

1

简答题 - 没有。

稍长 - ElasticSearch不是无模式 - 它是动态的。这意味着每个字段的都有一个类型,但是这种类型不需要事先指定,但可以根据遇到的第一个值动态确定。 但是再次 - 没有映射的领域没有这样的事情。您不能拥有包含不同类型值的字段。 如果这是你必须拥有的东西,你可以将这个字段的所有值转换为字符串。