elasticsearch kibana使用查询更新的空间更新文件

时间:2018-03-09 07:19:03

标签: elasticsearch kibana

我有一个要更新的字段,其中有空格。

POST /index/type/_update_by_query
{
  "query": {
      "match_phrase":{
        "field": "value"
      }
  },
  "script":{
    "lang": "painless",
    "inline": "ctx._source.Existing Field = New_Value"
  }
}

但是我收到了这个错误。

{
  "error": {
    "root_cause": [
      {
        "type": "script_exception",
        "reason": "compile error",
        "script_stack": [
          "ctx._source.Existing Field = New_Value",
          "                     ^---- HERE"
        ],
        "script": "ctx._source.Existing Field = New_Value",
        "lang": "painless"
      }
    ],
    "type": "script_exception",
    "reason": "compile error",
    "script_stack": [
      "ctx._source.Existing Field = New_Value",
      "                     ^---- HERE"
    ],
    "script": "ctx._source.Existing Field = New_Value",
    "lang": "painless",
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "unexpected token ['Field'] was expecting one of [{<EOF>, ';'}]."
    }
  },
  "status": 500
}

当我在没有空间的字段上执行此查询时,它可以正常工作。 如何处理字段名称中有空格的情况?

ELK版本= 5.4.3 我在文档中读到不建议在字段名中使用空格,但是这些字段是从某个服务器动态创建的,每天都有1M个数据条目。因此,我想对所有匹配的条目执行update_by_query。

1 个答案:

答案 0 :(得分:0)

试试这个:

POST index/type/_update_by_query
{
  "script":{
    "lang": "painless",
    "inline": "ctx._source['Existing Field'] = 'New Value'"
  }
}

这是可能的,因为ctx._source是无痛Map的实例,这是一个普通的Java HashMap。它允许您访问具有奇怪字符的字段,还可以在update查询中添加和删除字段。

希望有所帮助!