Я работаю над сценарием, который обновляет вложенное поле индекса. В основном это добавляет новый вложенный документ. Я хочу обновить скрипт, чтобы он возвращал общее количество вложенных документов для этого поля.
Вот структура
Индекс: вложенное поле темы: users_read
Всякий раз, когдановый пользователь читает, его имя добавляется в "users_read". Это происходит через скрипт.
Я хочу изменить скрипт, чтобы он возвращал значение числа users_read.
{
"_index": "topic",
"_type": "_doc",
"_id": "11111",
"_score": 1.0,
"_source": {
"id": "11111",
"users": [
{
"users_read": "div.sar@abc.com"
},
{
"users_read": "admin2@xyz.com"
},
{
"users_read": "admin"
},
{
"users_read": "admin2@def.com"
}
]
}
}
Вот скрипт, который я использую
POST -http://elasticserver:9200/topic/_update/11111
{
"script": {
"inline": "ctx._source.users.add(params.user)",
"lang": "painless",
"params": {
"user": {
"users_read":"admin2@dfg.com"
}
},
"source": "ctx._source.users.size()"
}
}
Но я вижу исключение
{
"error": {
"root_cause": [
{
"type": "x_content_parse_exception",
"reason": "[10:19] [script] failed to parse field [source]"
}
],
"type": "x_content_parse_exception",
"reason": "[10:19] [UpdateRequest] failed to parse field [script]",
"caused_by": {
"type": "x_content_parse_exception",
"reason": "[10:19] [script] failed to parse field [source]",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "must only use one of [source, id] when specifying a script"
}
}
},
"status": 400
}
Когда я удаляю "исходную" часть, скрипт обновляет поле.
POST - http://elasticserver:9200/topic/_update/11111
{
"script": {
"inline": "ctx._source.users.add(params.user)",
"lang": "painless",
"params": {
"user": {
"users_read":"admin2@dfg.com"
}
}
}
}
{
"_index": "topic",
"_type": "_doc",
"_id": "11111",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
}
Любая помощь очень ценится.