У меня есть эти данные в качестве примера
{
"_index": "tags",
"_type": "tag",
"_id": "AVhDUH51AIyDmaqCQz3I",
"_score": 1,
"_source": {
"tagname": "tag1",
"tagnameFr": "tag1fr",
"description": "Some description",
"descriptionFr": "Some description fr",
"contests": [
{
"id": 22
},
{
"id": 33
},
{
"id": 44
}
],
"deal": null,
"category": null
}
}
Я сделал это, чтобы обновить вложенный документ, и он прекрасно работает
// $column = 'contests'; $data = ['contest' => array('id' => 1, 'name' => 'test')];
$this->params['body'] = array(
'script' => array(
"inline" => "ctx._source." . $column . ".add(params." . $column . ")",
"lang" => "painless",
"params" => $data
)
);
Но когда я пытаюсь сделать удаление, как это
// $list = 'contests'; and $value = array('id' => 1, 'name' => 'test');
$this->params['body'] = array(
"script" => "ctx._source." . $list . ".remove(params.item)",
"lang" => "painless",
"params" => array(
'item' => $value
)
);
Когда я выполняю код выше, я получаю это сообщение /
BadRequest400Exception в файле Connection.php, строка 681:
{ «Ошибка»: { «ROOT_CAUSE»: [{ «типа»: «remote_transport_exception», «причина»: «[56NCJVE] [127.0.0.1:9300] [Индексы: данные / записи / обновления [с]]»}] , «type»: «invalid_argument_exception», «reason»: «не удалось выполнить скрипт», «reason_by»: {«type»: «script_exception», «reason»: «ошибка времени выполнения», «reason_by»: {«type» : «null_pointer_exception», «reason»: null}, «script_stack»: [«ctx._source.contest.remove (params.item)», «^ —- HERE»], «script»: «ctx._source .contest.remove (params.item)», «языки»: «безболезненно»}}, «статус»: 400}
Я также попытался выполнить этот скрипт в моем коде, но я получаю ту же ошибку, что и выше.
{
"script": "item_to_remove = nil; foreach (item : ctx._source.list) { if (item['tweet_id'] == tweet_id) { item_to_remove=item; } } if (item_to_remove != nil) ctx._source.list.remove(item_to_remove);",
"params": {"tweet_id": "123"}
}
И оба сценария, с которыми я выполняю update
$this->client->update($this->params);
Задача ещё не решена.
Других решений пока нет …