如何在弹性搜索中插入具有动态特性的嵌套对象?
我在elasticsearch中有一个文档如下所示:如何在弹性搜索中插入具有动态特性的嵌套对象?,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我在elasticsearch中有一个文档如下所示: { "_index": "stats", "_type": "_doc", "_id": "1", "_score": 1.0, "_source": { "publishTime": { "lastUpdate": 1580991095131, "h0_4": 0, "h4_8": 0, "
{
"_index": "stats",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"publishTime": {
"lastUpdate": 1580991095131,
"h0_4": 0,
"h4_8": 0,
"h8_12": 3,
"h12_16": 5,
"h16_20": 2,
"h20_24": 1
},
"postCategories": {
"lastUpdate": 1580991095131,
"tech": 56,
"lifestyle": 63,
"healthcare": 49,
"finances": 25,
}
}
}
通过向/stats/\u update/1
发送POST
请求来更新/增加现有属性值非常有效!但是,如果我尝试在postCategories
下插入一个不存在的属性名,我会收到一个错误请求(400)
错误,类型为远程传输\u异常/非法参数\u异常
:
"ctx._source.postCategories.relationships += params.postCategories.relationships",
^---- HERE"
向上插入
{
"script": {
"source": "ctx._source.postCategories.relationships += params.postCategories.relationships",
"lang": "painless",
"params": {
"postCategories": {
"relationships": 2
}
}
},
"upsert": {
"postCategories": {
"relationships": 2
}
}
}
{
"scripted_upsert":true,
"script": {
"source": "ctx._source.postCategories.relationships += params.postCategories.relationships",
"params": {
"postCategories": {
"relationships": 2
}
}
},
"upsert": {}
}
我还尝试了脚本化的Upsert方法,方法如下所示,但是,出现了相同的错误:
脚本化的升级
{
"script": {
"source": "ctx._source.postCategories.relationships += params.postCategories.relationships",
"lang": "painless",
"params": {
"postCategories": {
"relationships": 2
}
}
},
"upsert": {
"postCategories": {
"relationships": 2
}
}
}
{
"scripted_upsert":true,
"script": {
"source": "ctx._source.postCategories.relationships += params.postCategories.relationships",
"params": {
"postCategories": {
"relationships": 2
}
}
},
"upsert": {}
}
谁能告诉我如何在postCategories
对象下正确添加/插入新的属性名
谢谢大家! 基本上是说,您试图为一个不存在的字段赋值。我认为下面应该有效(未经测试) 尝试检查字段是否存在-如果存在,继续操作。 否则,添加新字段并赋值
"if (ctx._source.postCategories.containsKey(\"relationships\")) { ctx._source.postCategories.relationships += params.postCategories.relationships} else { ctx._source.postCategories[\"relationships\"] = params.postCategories.relationships}",