【问题标题】:Upserting field doesn't work with elasticsearch-php更新插入字段不适用于 elasticsearch-php
【发布时间】:2018-07-12 12:34:16
【问题描述】:

elasticsearch-php 6.0 中的语句:

这意味着 upsert 将尝试运行您的更新脚本,但如果文档不存在(或您尝试更新的字段不存在),则会插入默认值。

当我尝试将字段更新到现有文档时,它不起作用并返回 null_pointer_exception。尝试使用 curl 会返回相同的结果。

Elasticsearch 参考 [6.1] 没有提到可以更新插入字段。可能是版本问题。没有 Elasticsearch-PHP [6.1] !!

参考中的示例:

curl -XPOST 'localhost:9200/test/type1/1/_update?pretty' -H 'Content-Type: application/json' -d'
{
    "script" : {
        "source": "ctx._source.ava += params.count",
        "lang": "painless",
        "params" : {
            "count" : 4
        }
    },
    "upsert" : {
        "ava" : 1
    }
}
'

当文档存在且字段 'ava' 不存在时不起作用。

那么,问题是如何将一个字段插入到现有文档中? curl 例子没问题,谢谢。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    如果ava 字段不存在,则需要 NPE。改为这样更改您的脚本:

    {
        "script" : {
            "source": "ctx._source.ava = (ctx._source.ava ?: 0) + params.count",
            "lang": "painless",
            "params" : {
                "count" : 4
            }
        },
        "upsert" : {
            "ava" : 1
        }
    }
    

    【讨论】:

    • 非常感谢。真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多