我正在尝试向Elasticsearch添加异构数据(即不同的“类型”)。每个(顶级)对象包含应用程序的用户设置。一个简单的例子是:
{
'name':'test',
'settings': [
{
'key':'color',
'value':'blue'
},
{
'key':'isTestingMode',
'value':true
},
{
'visibleColumns',
'value': [
'column1',
'column3',
'column4',
]
},
...
...
}
当我尝试添加它时,POST失败并出现MapperParsingException。搜索周围,似乎这是因为'value'字段有不同的类型。
有没有办法像这样存储任意数据?
答案 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字段执行此规范化。通过这种方式,源保持原样并且您将得到您想要的。