如何将异构数据添加到Elasticsearch?

时间:2015-01-28 14:33:07

标签: elasticsearch

我正在尝试向Elasticsearch添加异构数据(即不同的“类型”)。每个(顶级)对象包含应用程序的用户设置。一个简单的例子是:

{
'name':'test',
'settings': [
    {
        'key':'color',
        'value':'blue'
    },
    {
        'key':'isTestingMode',
        'value':true
    },
    {
        'visibleColumns',
        'value': [
            'column1',
            'column3',
            'column4',
        ]
    },
    ...
    ...
}

当我尝试添加它时,POST失败并出现MapperParsingException。搜索周围,似乎这是因为'value'字段有不同的类型。

有没有办法像这样存储任意数据?

1 个答案:

答案 0 :(得分:1)

这是不可能的。 映射是每个字段,映射不是数组感知。 这意味着您可以将settings.value保持为字符串或数组,但不能同时保持两者。

一个简单的调整是将所有值定义为数组 -

{
'name':'test',
'settings': [
    {
        'key':'color',
        'value': [ 'blue' ]
    },
    {
        'key':'isTestingMode',
        'value': [ true ] 
    },
    {
        'visibleColumns',
        'value': [
            'column1',
            'column3',
            'column4',
        ]
    },
    ...
    ...
}

如果这是不可接受的,那么另一个想法是应用source transform,它将在index.之前对settings.value字段执行此规范化。通过这种方式,源保持原样并且您将得到您想要的。