Я хочу добавить объект в поле nested
каждое время обновления.elasticsearch: использовать скрипт для обновления вложенного поля?
К примеру, у меня есть документ:
{
"test":[{"remark":"remark1"}]
}
В следующий раз, я хочу, чтобы добавить remark
объект в тестовом поле и сохранить старый remark
objects.And результат:
{
"test":[{"remark":"remark1"},{"remark":"remark2"}]
}
?
Как достичь этого
Редактировать Я использую скрипт:
{
"script": "ctx._source.test= ((ctx._source.test?: []) += remarkItem)",
"params": {
"remarkItem": {
"remark": "addd"
}
}
}
Но я получаю исключение:
{
"error": {
"root_cause": [
{
"type": "remote_transport_exception",
"reason": "[es77][10.14.84.77:9300][indices:data/write/update[s]]"
}
],
"type": "illegal_argument_exception",
"reason": "failed to execute script",
"caused_by": {
"type": "script_exception",
"reason": "Failed to compile inline script [ctx._source.test= ((ctx._source.test?: []) += remarkItem)] using lang [groovy]",
"caused_by": {
"type": "script_exception",
"reason": "failed to compile groovy script",
"caused_by": {
"type": "multiple_compilation_errors_exception",
"reason": "startup failed:\na8220b2cf14b8b7ebeead7f068416882d04fa25d: 1: \nclass org.codehaus.groovy.ast.expr.ElvisOperatorExpression, with its value '(ctx._source.test) ? ctx._source.test: []', is a bad expression as the left hand side of an assignment operator at line: 1 column: 82. File: a8220b2cf14b8b7ebeead7f068416882d04fa25d @ line 1, column 82.\n CILastCallResultRemark ?: []) += remarkI\n ^\n\n1 error\n"
}
}
}
},
"status": 400
}
редактировать
Теперь я хочу, чтобы добавить поле, чтобы обеспечить обновление или вставить объект. Например:
{
"test":[{"remark":"remark1","id":"1"}]
}
Когда я обновить поле, когда идентификатор существует, я буду обновлять object.On противный, я вставлю объект.
Смотрите этот ответ: http://stackoverflow.com/questions/34512491/elasticsearch-groovy-script-syntax-for-generation-of-nested-fields/34512738 # 34512738 – Val
@Val { "script": "ctx._source.test = ((ctx._source.test? : []) + = remarkItem) ", "params": { "remarkItem": { "примечание": "addd" } } } .. У этого сценария есть ошибка. Почему? –
Обновите свой вопрос тем, что вы пробовали, и ошибкой, которую вы получили. – Val