1

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

默认情况下,index.mapper.dynamictrue. 因此,类型映射是根据第一次接收到的数据自动定义的,用于索引(While creating the index for first set of JSON data)。现在假设,我的第一组数据的Id值为123,所以 type ofId映射为Integer。因此,当某些数据具有Idas String,likea123时,它​​会抛出异常,因为类型映射到Integer

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

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

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

4

1 回答 1

1

简短的回答 - 不。

再长一点——ElasticSearch 不是无模式的——它是动态的。意思是每个字段都有一个类型,但是这个类型不需要提前指定,可以根据遇到的第一个值动态确定。但同样 - 没有没有映射的字段。您不能拥有包含不同类型值的字段。如果这是您必须拥有的东西,您可以将该字段的所有值转换为字符串。

于 2013-10-21T13:48:51.010 回答