尝试将mongoDb中的数据插入Elastic时,我得到了几个映射异常。经过一些调查工作后,似乎错误来自于我的数据库中有一个字段,有时是字符串数组,而有时是一个对象数组。
意思是,对于mongo中的一些文档,它将具有:
{"my_field" : ["one", "two"]
而其他人
{"my_field": [{"key":"value", "key2":"value"}, {"key":"value", "key2":"value"}, ...]
我很难确定Elastic如何处理这种情况。
答案 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,弹性搜索将在索引之前运行以转换数据。