【发布时间】:2023-02-10 18:13:46
【问题描述】:
我正在 Elastic search 中编写一些查询来计算索引中的一些事件。我认为我的构造是正确的,但虽然我可以从聚合组中获得搜索结果,但实际上我想要的是计数,而不是结果。
我的背景是 SQL,我尝试执行的等效查询是:
SELECT
COUNT(1) as volume
FROM (
SELECT
key
, type
, ROW_NUMBER() OVER( PARTITION BY key ORDER BY timestamp DESC ) AS instance
FROM event
) A
WHERE type != 'Delete'
AND instance = 1
通俗点说就是:key统计最近一次事件的事件量,不包括删除
我试过以下弹性:
GET /index/_search
{
"size": 0,
"aggs": {
"group_by_key": {
"terms": {
"field": "key",
"size": 1000000
},
"aggs": {
"top_record_per_group": {
"top_hits": {
"sort": [
{
"timestamp": {
"order": "desc"
}
}
],
"size": 1
}
}
}
}
},
"query": {
"bool": {
"must_not": [
{
"term": {
"type": "Delete"
}
}
]
}
}
}
...这确实返回了我所期望的。我知道计数 API 并且知道它不支持聚合。
任何人都可以帮助指出我遗漏的一点,并希望向我展示仅获取体积值的最有效方法(即没有其他结果)?
提前致谢
【问题讨论】:
-
如果你得到一个计数,我认为你不需要按键排序最新事件的标准。
标签: elasticsearch