我在社区找到一个利用scripted_metric做ES交集的DSL,放到自己的es 5.5.1版本执行后报错:can not write type [class java.util.HashSet],具体DSL如下:
{
"size": 0,
"query": {
"bool": {
"should": [
{
"range": {
"pt": {
"gte": "1554566400",
"lte": "1554566400"
}
}
},
{
"range": {
"pt": {
"gte": "1554480000",
"lte": "1554480000"
}
}
}
]
}
},
"aggs": {
"intersect": {
"scripted_metric": {
"init_script": "params._agg.a=new HashSet();params._agg.b=new HashSet()",
"map_script": "if(doc['pt'].value >= 1554566400&&doc['pt'].value <= 1554566400){params._agg['a'].add(doc['pn'].value);}if(doc['pt'].value >= 1554480000&&doc['pt'].value <= 1554480000){params._agg['b'].add(doc['pn'].value)}",
"reduce_script": "def a=new HashSet(),b=new HashSet();params._aggs.forEach(item->{a.addAll(item.a);b.addAll(item.b);});a.retainAll(b);return a"
}
}
}
}
请问有什么解决方法吗