我想在Elasticsearch中将一些数据附加到文档中,并使用MVEL设置时间戳。
这是我目前正在尝试的。但它不起作用。
{“error”:“ElasticSearchIllegalArgumentException [无法执行 脚本];嵌套:PropertyAccessException [[错误:无法访问 property(Timestamp)in:java.lang.Long] \ n [near:{... Timestamp ....}] \ n ^ \ n [Line:1,Column:1]]; ”, “状态”:400}
如何访问Timestamp字段(通过映射成功创建)
{
"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”到“测试”。
答案 0 :(得分:1)
我能够像数组一样非常简单地更新整个数组或整个字段。 按照这些步骤。
步骤-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"}
}