【发布时间】:2018-04-14 01:04:48
【问题描述】:
我在 elasticsearch (5.5.1) 中有一个字段,我需要重命名该字段,因为该名称包含“。”它正在引起各种问题。我要重命名的字段嵌套在另一个字段中。
我正在尝试在摄取管道中使用重命名处理器来执行重新索引,如下所述:https://stackoverflow.com/a/43142634/5114
这是我的管道模拟请求(您可以将其逐字复制到 Kibana 的开发工具实用程序中进行测试):
POST _ingest/pipeline/_simulate
{
"pipeline" : {
"description": "rename nested fields to remove dot",
"processors": [
{
"rename" : {
"field" : "message.message.group1",
"target_field" : "message_group1"
}
},
{
"rename" : {
"field" : "message.message.group2",
"target_field" : "message.message_group2"
}
}
]
},
"docs":[
{
"_type": "status",
"_id": "1509533940000-m1-bfd7183bf036bd346a0bcf2540c05a70fbc4d69e",
"_version": 5,
"_score": null,
"_source": {
"message": {
"_job-id": "AV8wHJEaa4J0sFOfcZI5",
"message.group1": 0,
"message.group2": "foo"
},
"timestamp": 1509533940000
}
}
]
}
问题是我在尝试使用我的管道时遇到错误:
{
"docs": [
{
"error": {
"root_cause": [
{
"type": "exception",
"reason": "java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: field [message.message.group1] doesn't exist",
"header": {
"processor_type": "rename"
}
}
],
"type": "exception",
"reason": "java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: field [message.message.group1] doesn't exist",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "java.lang.IllegalArgumentException: field [message.message.group1] doesn't exist",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "field [message.message.group1] doesn't exist"
}
},
"header": {
"processor_type": "rename"
}
}
}
]
}
我认为问题是由字段“message.group1”在另一个字段(“消息”)内引起的。我不确定如何在处理器的上下文中引用我想要的字段。嵌套字段、包含点的字段和包含点的嵌套字段之间似乎存在歧义。
我正在寻找引用这些字段的正确方法,或者如果 Elasticsearch 无法执行我想要的操作,请确认这是不可能的。如果 Elasticsearch 可以做到这一点,那么它可能会非常快,否则我必须编写一个外部脚本来提取文档、转换它们,然后将它们重新保存到新索引中。
【问题讨论】:
-
这是一个关于类似问题的老问题:stackoverflow.com/questions/36774110/…
标签: elasticsearch rename pipeline reindex