![](/img/trans.png)
[英]Aggregation date using Elasticsearch RestHighLevelClient
[英]Elasticsearch aggregation histogram by date no longer works with script
我有一个ES查询,它返回一些26个结果。
该查询具有聚合直方图元素,如下所示:
"aggregations" : {
"by_date" : {
"date_histogram" : {
"field" : "startDate",
"interval" : "month"
}
}
}
搜索结果的聚合元素如下所示:
"aggregations": {
"date_histogram": {
"buckets":[
{"key_as_string":"2016-01-01T00:00:00.000Z", "key":1451606400000, "doc_count":18},
{"key_as_string":"2016-02-01T00:00:00.000Z", "key":1454284800000, "doc_count":8}
]
}
}
到现在为止还挺好。 但是我想要对搜索结果执行一些脚本操作,以删除不符合某些条件的元素。 所以我将其添加到查询中:
"aggregations" : {
"by_date" : {
"date_histogram" : {
"field" : "startDate",
"interval" : "month",
"script" : {
"inline" : "if (condition) {return 1} else {return 0}"
}
}
}
不幸的是,这导致了一个结果桶,并且聚合丢失了:
"date_histogram": {
"buckets": [
{"key_as_string": "1970-01-01T00:00:00.000Z", "key": 0, "doc_count": 26 }
]
}
我尝试了什么:
inline
元素减少为仅return 1
。 这仍然会导致聚合失败 value
。 结果ClassCastException
结果应为数字 script.engine.groovy.{file|indexed|inline}.{aggs|mapping|search|update|plugin}
,以及script.inline
, script.indexed
和script.aggs
启用了所有功能。 我知道我可以运行在查询本身(而不是聚合部分)中具有该过滤器的单独查询,这将使我无需脚本即可进行聚合。 关键是我有许多不同的聚合,它们采用相同的搜索结果集并进行不同类型的过滤(和聚合)。 多次运行相同的查询会适得其反,并且不可接受 。
据我所知,这曾经在1.4.4版中起作用,但在2.2.0版中不再起作用。
这是错误吗? 还是可以以不同的方式重新实现相同的逻辑,例如通过Bucket Script Aggregation或其他方式?
您是否尝试过使用新的聚合框架和groovy样式脚本中的内联三进制?
我以前遇到过同样的问题,这就是我解决的方法。 您的聚合查询如下所示:
"aggs": {
"2": {
"date_histogram": {
"field": "startDate",
"interval": "month",
},
"aggs": {
"1": {
"sum": {
"script": "((condition) ? 1 : 0)",
"lang": "expression"
}
}
}
}
}
请注意,您还可以通过在ElasticSearch安装的scripts文件夹中将脚本定义为.groovy文件来进行尝试。
希望对您有所帮助。
问候。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.