当前位置:  开发笔记 > 前端 > 正文

Elasticsearch upserting并附加到数组

如何解决《Elasticsearchupserting并附加到数组》经验,为你挑选了1个好方法。

我正在尝试编写一个脚本,将新用户记录添加到ElasticSearch,如果用户已经存在则更新任何信息,并将新的PaymentInfo对象附加到用户的Payments数组(如果它存在于更新对象中).这是我目前使用的简化版本:

curl -XPOST 'http://localhost:9200/usrtest/usr/1/_update' -d '
{
    "doc_as_upsert": true, 
    "doc": {
        "customerId": "1",
        "firstName": "Mark",
        "lastName": "Z",
        "emailAddress": "foo.bar@gmail.com",
        "paymentInfo": {
            "pid": "1",
            "amt": "10"
        }
    }
}'

这几乎可以满足我的需求,因为它可以正确地插入文档,或者如果用户存在具有相同ID的情况下更新文档,但是如果用户已经存在,则缺少将此paymentInfo添加到用户的paymentInfos数组的方面.就像现在一样,它只是覆盖了paymentInfo对象.我已经尝试将此脚本添加到更新JSON:

"script": "if (ctx._source.containsKey(\"paymentInfos\")) {ctx._source.paymentInfos += paymentInfo;} else {ctx._source.paymentInfos = paymentInfo}"

但是弹性搜索docscript指定元素时忽略元素.

我觉得我在这里错过了一些愚蠢的东西,但我不确定.这里有人可以帮帮我吗?

编辑: 我也尝试了以下内容:

curl -XPOST 'http://localhost:9200/usrtest/usr/1/_update' -d '
{    
    "script": "if (ctx._source.containsKey(\"paymentInfos\")) {ctx._source.paymentInfos += paymentInfo;} else {ctx._source.paymentInfos = paymentInfo}",
    "upsert": {
        "customerId": "1",
        "firstName": "Mark",
        "lastName": "Z",
        "emailAddress": "foo.bar@gmail.com",
        "paymentInfo": {
            "pid": "1",
            "amt": "10"
         }
    },
    "params": {
         "paymentInfo": {
            "pid": "1",
                "amt": "10"
         }
    }
}'

几乎也是我想要的,因为它在我多次运行脚本时附加了paymentInfo对象,但是否则它不会更新文档本身(即如果我再次运行脚本,将Mark改为Mindy,它不更新,因为upsert仅在文档不存在时才使用元素.



1> Paul Blakey..:

你想要在脚本的插入部分添加一些数组括号.

"script": "if (ctx._source.containsKey(\"paymentInfos\")) {ctx._source.paymentInfos += paymentInfo;} else {ctx._source.paymentInfos = [paymentInfo]}"

第一部分中的'paymentInfos'属性被定义为一个对象,因此也可能导致您跌倒.


弄清楚:""脚本":"ctx._source.paymentInfos =(ctx._source.paymentInfos)?ctx._source.paymentInfos + paymentInfo:[paymentInfo]"`
这个答案有效吗?如果是这样的话@Seventh Helix请将其投票.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有