Elasticsearch version:5.1
Elasticsearch-php version: 5.0
文档是:
array(6) { ["_index"]=> string(4) "demo" ["_type"]=> string(4) "demo" ["_id"]=> string(1) "1" ["_version"]=> int(5) ["found"]=> bool(true) ["_source"]=> array(4) { ["a"]=> int(3) ["b"]=> string(1) "a" ["c"]=> string(1) "b" ["d"]=> array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } } }
然后我执行下面的代码:
require_once './vendor/autoload.php'; $client = Elasticsearch\ClientBuilder::create(); $client->setHosts(['127.0.0.1']); $client = $client->build(); print_r($client->update([ 'index' => 'demo', 'type' => 'demo', 'id' => 1, 'body' => [ 'script' => 'ctx._source.counter += 4', 'params' => [ 'count' => 4 ], 'upsert' => [ 'counter' => 1 ] ] ]));
提示我:
Fatal error: Uncaught Elasticsearch\Common\Exceptions\BadRequest400Exception: {"error":{"root_cause":[{"type":"remote_transport_exception","reason":"[shcGs0R][127.0.0.1:9300][indices:data/write/update[s]]"}],"type":"illegal_argument_exception","reason":"failed to execute script","caused_by":{"type":"script_exception","reason":"runtime error","caused_by":{"type":"null_pointer_exception","reason":null},"script_stack":["ctx._source.counter += 4"," ^---- HERE"],"script":"ctx._source.counter += 4","lang":"painless"}},"status":400}
print_r($client->update([ 'index' => 'demo', 'type' => 'demo', 'id' => 1, 'body' => [ 'script' => 'ctx._source.a += params.count', 'params' => [ 'count' => 4 ], ] ]));
这个也提示这个错误:
Fatal error: Uncaught Elasticsearch\Common\Exceptions\BadRequest400Exception: {"error":{"root_cause":[{"type":"remote_transport_exception","reason":"[shcGs0R][127.0.0.1:9300][indices:data/write/update[s]]"}],"type":"illegal_argument_exception","reason":"failed to execute script","caused_by":{"type":"script_exception","reason":"runtime error","caused_by":{"type":"null_pointer_exception","reason":null},"script_stack":["ctx._source.a += params.count"," ^---- HERE"],"script":"ctx._source.a += params.count","lang":"painless"}},"status":400}
空指针异常,
ctx._source.counter
脚本不存在