更新文档

编辑

更新文档允许您完全替换现有文档的内容,或对某些字段执行部分更新(更改现有字段或添加新字段)。

部分文档更新

编辑

如果您想部分更新文档(例如,更改现有字段或添加新字段),可以通过在 body 参数中指定 doc 来实现。这会将 doc 中的字段与现有文档合并。

$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
    'body'  => [
        'doc' => [
            'new_field' => 'abc'
        ]
    ]
];

// Update doc at /my_index/_doc/my_id
$response = $client->update($params);


脚本化文档更新

编辑

有时您需要执行脚本化更新,例如递增计数器或将新值追加到数组。要执行脚本化更新,您需要提供一个脚本,通常还需要一组参数。

$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
    'body'  => [
        'script' => 'ctx._source.counter += count',
        'params' => [
            'count' => 4
        ]
    ]
];

$response = $client->update($params);


Upserts

编辑

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

$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
    'body'  => [
        'script' => [
            'source' => 'ctx._source.counter += params.count',
            'params' => [
                'count' => 4
            ],
        ],
        'upsert' => [
            'counter' => 1
        ],
    ]
];

$response = $client->update($params);