假设将以下文档插入Elasticsearch。
{
"message": "hello",
"request": {
"body": {
"data": "hi",
"some_what_dynamic": {
"nested": {
"not_ending": 10000
}
}
}
}
}
鉴于字段request.body
是动态对象,其中包含嵌套对象和/或字段,我想将整个request.body
存储为string
而我不想要Elasticsearch为request.body
对象内的属性创建新字段。
如何定义映射以实现此目的?
这是当前的dynamic_templates定义:
{
"template": "logstash-*",
"mappings": {
"_default_": {
"dynamic_templates": [
{
"message_field": {
"path_match": "message",
"mapping": {
"norms": false,
"type": "text"
},
"match_mapping_type": "string"
}
},
{
"string_fields": {
"mapping": {
"norms": false,
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"match_mapping_type": "string",
"match": "*"
}
},
{
"body_fields": {
"match": "body",
"mapping": {
"norms": false,
"type": "text"
},
"match_mapping_type": "object"
}
}
],
...
}
}
}
当我尝试插入文档时,我收到MapperParsingException
消息Can't get text on a START_OBJECT at...
。
答案 0 :(得分:0)
我猜你只需要用双引号将body元素中的所有内容包装起来?像这样的东西可能有用(javascript)?
a={
"message": "hello",
"request": {
"body": {
"data": "hi",
"some_what_dynamic": {
"nested": {
"not_ending": 10000
}
}
}
}
};
a.request.body = JSON.stringify(a.request.body);