ElasticSearch _update_by_query 过滤数组元素

ElasticSearch _update_by_query filter elements of array

问题:我需要使用 _update_by_query 从 elasticsearch 数组中删除大于 25000000 的数字。

curl -XPOST 'http://127.0.0.1:9200/mydb/_update_by_query' --header 'Content-Type: application/json'  --data '
{"query": {
 "range": {
 "multiAccounts": { "gte": 25000000 } } },
 "script": {"source": "ctx._source.multiAccounts = ctx._source.multiAccounts;"}
}'

Insted of ctx._source.multiAccounts = ctx._source.multiAccounts; 我需要类似的东西:

ctx._source.multiAccounts = ctx._source.multiAccounts.filter(el < 25000000);

由于 Painless 依赖于 Java(如果 multiAccounts 是源文档中的数组),那么您可以使用流,如下所示:

ctx._source.multiAccounts = ctx._source.multiAccounts.stream().filter(el -> el > 25000000).collect(Collectors.toList());