我的elasticsearch收到许多JSON日志。我无法控制架构。 是否可以动态索引新字段,但如果字段类型发生变化,以某种方式取消索引?
这背后的原因是,我没有JSON日志的架构。由于字段类型不匹配,我也不想丢失日志。最后,我希望能够使用一致的字段类型对这些字段进行查询!
非常感谢,
丹尼尔
答案 0 :(得分:1)
如果某个字段不存在,则默认情况下会在映射中创建该字段。 ES将尽力做到"猜测"该字段的类型。但是,如果您尝试在事后索引与初始类型不匹配的ES,则会抱怨。例如,如果您索引了一个数字,并且ES猜到了它,那么它将创建一个type: long
的索引。之后,如果您使用与long
字段同名的字段对文档编制索引,但是将"bla bla"
作为值,ES将会投诉并且不会索引您的文档。如果您想忽略此类错误,则需要ignore_malformed: true
。相关文档为here:
有时您无法控制所收到的数据。一个用户可以发送作为日期的登录字段,另一个用户发送作为电子邮件地址的登录字段。
尝试将错误的数据类型索引到字段中默认情况下会抛出异常,并拒绝整个文档。 ignore_malformed参数(如果设置为true)允许忽略该异常。格式错误的字段未编入索引,但文档中的其他字段将正常处理。