我想在Elasticsearch中向文档添加一些数据,并使用MVEL设置时间戳。
这是我目前正在尝试的。但这是行不通的。
{"error":"ElasticSearchIllegalArgumentException[failed to execute script]; nested: PropertyAccessException[[Error: could not access property (Timestamp) in: java.lang.Long]\n[Near : {... Timestamp ....}]\n ^\n[Line: 1, Column: 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”到“测试”。
最佳答案
我能够像数组一样非常简单地更新整个数组或整个字段。
请按照下列步骤。
步骤-1 放置一个smaple数据。
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"}
}
关于elasticsearch - 如何在Elasticsearch中使用MVEL访问/更新嵌套字段的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19724047/