0

我想将一些数据附加到 Elasticsearch 中的文档并使用 MVEL 设置时间戳。

这就是我目前正在尝试的。但它不起作用。

{"error":"ElasticSearchIllegalArgumentException[未能执行脚本];嵌套:PropertyAccessException[[错误:无法访问属性(时间戳)在:java.lang.Long]\n[Near : {... Timestamp .... }]\n ^\n[行: 1, 列: 1]]; ","status":400}

如何访问时间戳字段(通过映射成功创建)

  {
  "script": "
            valueSet.Timestamp = time();
            if (ctx._source[\"values\"] == null) { ctx._source.values = valueSet} else {ctx._source.values += valueSet}
            ",
  "params": {
    "valueSet": 
    [ 
    {
      "Timestamp": "",
      "value": "100.00"
    } 
   ]
  }
}

更新:

了解如何访问 valueSet

  {
  "script": "
            valueSet[0].value = 'test';
            if (ctx._source[\"values\"] == null) { ctx._source.values = valueSet} else {ctx._source.values += valueSet}
            ",
  "params": {
    "valueSet": 
    [ 
    {
      "Timestamp": "",
      "value": "100.00"
    } 
   ]
  }
}

以上将覆盖“100.00”为“测试”。

4

1 回答 1

1

我能够像数组一样非常简单地更新整个数组或整个字段。按照这些步骤。

step -1放一个小数据。

    PUT /1/user/1
    {
        "userId":2,
        "sid":1,
             "1": [
                    "24 hrs left!"
                ]
            ,
            "2": 9
            ,
             "32": "2014-08-01T00:00:00"
            ,
             "evant": [

        {
            "name": "2",
            "count": 9,
            "first_date":"2014-08-01T00:00:00",
            "last_date":"2014-08-01T00:00:00",
            "_date":["2014-08-01T00:00:00",
            "2014-08-01T00:00:00",
            "2014-08-01T00:00:00"]
        },
        {
            "name": "3",
            "count": 9,
            "first_date":"2014-08-01T00:00:00",
            "last_date":"2014-08-01T00:00:00",
            "_date":["2014-08-01T00:00:00",
            "2014-08-01T00:00:00",
            "2014-08-01T00:00:00"]
        }]
}

步骤 2。更新任何嵌套的字段值。

POST  /1/user/1/_update
{
  "script": "foreach (item : ctx._source.evant) { if (item['name'] == name) { item['name'] =  item['name']==null?\"none\": 'myname'; } }",
  "params": {"name": "abc"}
}

步骤 3。添加任何新字段。

POST  /1/user/1/_update
{
  "script": "foreach (item : ctx._source.evant) { if (item['name'] == name) { item['Fname']='zyz'; } }",
  "params": {"name": "abc"}
}
于 2015-01-05T09:58:59.183 回答