如何在使用reindex时转换为大写并删除特定字段?

时间:2017-11-23 19:08:24

标签: elasticsearch elasticsearch-5 elasticsearch-painless

我正在尝试从ES 1.4迁移到ES 5.5。在其中一个索引中,我需要更改字段名称,并将其值转换为大写。我可以使用字段名称的更改重新索引并删除不需要的字段,但需要帮助将值转换为大写。

这就是我试过的

POST _reindex?wait_for_completion=false
{
  "source": {
    "remote": {
      "host": "http://source_ip:17002"
    },
    "index": "log_event_2017-08-11",
    "size": 1000,
    "query": {
      "match_all": {}
    }
  },
  "dest": {
    "index": "logs-ics-2017-08-11"
  },
  "script": {
    "inline": "ctx._source.product = ctx._source.remove(\"product_name\")",
    "lang": "painless"
  }
}

上面的POST请求可以删除“product_name”并使用它的值创建“product”。所以为了大写“product”docs值,我尝试了下面的内联脚本,但它给出了null_pointer_exception。

我是Elasticsearch脚本的新手。请帮忙。

"ctx._source.product = ctx._source.remove(\"product_name\");ctx._source.product = doc[\"product\"].toUpperCase()"

1 个答案:

答案 0 :(得分:0)

您可以在触发_reindex api之前添加ingest pipeline。有一个处理器rename字段并将字段转换为uppercase。然后,您可以在您的reindex调用中合并管道。

{
  "source": {
    "index": "source"
  },
  "dest": {
    "index": "dest",
    "pipeline": "<id_of_your_pipeline>"
  }
}