elasticsearch 在Painless中比较两个JSON对象数组

a64a0gku  于 2023-03-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(184)

尝试比较2个包含painless(弹性)中JSON对象的数组

A: [{"key":"a1"},{"key":"a2"},{"key":"a3"},{"key":"a4"},{"key":"a5"}]
B: [{"key":"a1"},{"key":"a3"},{"key":"a4"}]

并在仅包含唯一值的退出数组上接收:

C: [{"key":"a2"},{"key":"a5"}]

它可以是一个新的数组(C)或更新的A(数组B可以是相同的大小或更小)
尝试了Arrays.asList的remove功能,但遇到了编译错误,不确定是语法错误还是方法错误。

C = Arrays.asList(ctx.payload.A).removeALL(Arrays.asList(ctx.payload.B))
5cnsuln7

5cnsuln71#

下面的脚本应该可以完成这项工作:

Set setB = ctx.payload.B.stream().map(obj -> obj.key).collect(Collectors.toSet());
List C = ctx.payload.A.stream().filter(obj -> !setB.contains(obj.key)).collect(Collectors.toList());

我已经使用了Java8流的简短。你可以阅读更多关于它的here

相关问题