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());
问题:我需要使用 _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());