将数据放入elasticsearch时,如何处理有时具有不同结构的字段?

时间:2015-07-16 13:35:26

标签: mongodb elasticsearch

尝试将mongoDb中的数据插入Elastic时,我得到了几个映射异常。经过一些调查工作后,似乎错误来自于我的数据库中有一个字段,有时是字符串数组,而有时是一个对象数组。

意思是,对于mongo中的一些文档,它将具有:

{"my_field" : ["one", "two"]

而其他人

{"my_field": [{"key":"value", "key2":"value"}, {"key":"value", "key2":"value"}, ...]

我很难确定Elastic如何处理这种情况。

1 个答案:

答案 0 :(得分:1)

您需要在索引数据之前按摩数据,以使其符合elasticsearch的规则。一种方法是my_field是一个嵌套文档 - 对于一个你可能拥有的文档

{"my_field": {"string_value": ["one", "two"]}}

和另一个

{"my_field": {"doc_value": {"key":"value", "key2":"value"}}}

这假定key和key2的值将始终具有相同的类型,并且本文档中存在少量可能的键。如果此文档包含任意数据,则最好将索引编译为

{"my_field": [{"key": "key1", "string_value": "value"},
            {"key": "key2", "int_value": "123"}]}

至于你如何按摩,一种选择是在将数据发送到elasticsearch之前执行此操作。缺点是_source属性显然包含转换后的数据。

另一种方法是按原样将数据发送到elasticsearch,但是在映射中有transform,弹性搜索将在索引之前运行以转换数据。