如何在弹性搜索中插入具有动态特性的嵌套对象?

如何在弹性搜索中插入具有动态特性的嵌套对象?,
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, "

我在elasticsearch中有一个文档如下所示:

{
    "_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}",