2 回答

TA贡献1824条经验 获得超5个赞
result = {}
for cluster_name, data in a.items():
type_data = {key: {'type': type(value).__name__} for key, value in data.items()}
result[cluster_name] = type_data
mapping = {"mapping": {"properties": result}}
因此,提供的数据的输出将是:
{
"mapping":{
"properties": {
"test.mydomain_1.xyz:1019": {
"infoAddr": {"type": "str"},
"usedSpace": {"type": "int"},
"capacity": {"type": "int"},
"version": {"type": "str"},
"used": {"type": "int"},
"remaining": {"type": "int"},
"volfails": {"type": "int"}},
"test.mydomain_2.xyz:1019": {
"infoAddr": {"type": "str"},
"usedSpace": {"type": "int"},
"capacity": {"type": "int"},
"version": {"type": "str"},
"used": {"type": "int"},
"remaining": {"type": "int"},
"volfails": {"type": "int"}
}
}
}
}

TA贡献1811条经验 获得超5个赞
如果您想将该源从弹性搜索日志映射到特定形式,我们打算在您在帖子中显示的 dict 映射中,通常,您需要创建某种形式的递归访问者,以便能够将其用于具有任意嵌套的 dicts 和如果可以应用映射,则有关字段类型的信息。
例如,您可以创建某种函数,如下所示:
def visit(data):
data_mapping = {}
for data_key, data_value in data.items():
if isinstance(data_value,dict):
if data_key not in data_mapping:
data_mapping[data_key] = {'properties': {}}
data_mapping[data_key]['properties'] = visit(data_value)
else:
data_mapping[data_key] = {
'type': data_value.__class__.__name__
}
return data_mapping
接下来,调用 elasticsearch 日志字典上的函数:
mapping = visit(data)
mapping = {'mapping': { 'properties': mapping}}
因此,输出将是:
{'mapping': { 'properties': {
'test.mydomain_1.xyz:1019': {
'properties': {
'infoAddr': {'type': 'str'},
'usedSpace': {'type': 'int'},
'capacity': {'type': 'int'},
'version': {'type': 'str'},
'used': {'type': 'int'},
'remaining': {'type': 'int'},
'volfails': {'type': 'int'}
}
},
'test.mydomain_2.xyz:1019': {
'properties': {
'infoAddr': {'type': 'str'},
'usedSpace': {'type': 'int'},
'capacity': {'type': 'int'},
'version': {'type': 'str'},
'used': {'type': 'int'},
'remaining': {'type': 'int'},
'volfails': {'type': 'int'}
}
}}}
添加回答
举报