ElasticSearch计算GroupSum为什么要求Limit?

d
dawangzi
楼主 (未名空间)

比如这个查询:

SELECT Count(1) cnt
FROM XXX
WHERE YYY
GROUP BY ZZZ
ORDER BY cnt DESC
LIMIT 512

结果集很大时必须加末尾的"LIMIT 512",513都不行。
否则报错
"{
"error": {
"root_cause": [
{
"type": "sql_illegal_argument_exception",
"reason": "The default limit [{}] for aggregate sorting has been
reached; please specify a LIMIT"
}
],
"type": "sql_illegal_argument_exception",
"reason": "The default limit [{}] for aggregate sorting has been reached; please specify a LIMIT"
},
"status": 500
}"

什么原理?请指教!
p
plzhs

几百万数据当然要limit
还有个分页问题吧 pagination
抛砖引玉 我也不懂
做过的说说

【 在 dawangzi (大王子*催贝卡) 的大作中提到: 】
: 比如这个查询:
: SELECT Count(1) cnt
: FROM XXX
: WHERE YYY
: GROUP BY ZZZ
: ORDER BY cnt DESC
: LIMIT 512
: 结果集很大时必须加末尾的"LIMIT 512",513都不行。
: 否则报错
: "{
: ...................

d
dawangzi

问题是不"order by"就不报错啊。
其实group一下就花费空间O(n)了,
时间O(n)也已花费。

order by无非是再花个O(nLogn),
空间重用原先那个O(n)的即可,
原地QSort.

反正我想不明白为了Sort还需Limit什么。

可能理解不深,
还请明白人说说。

【 在 plzhs (n o a h) 的大作中提到: 】
: 几百万数据当然要limit
: 还有个分页问题吧 pagination
: 抛砖引玉 我也不懂
: 做过的说说

sunshineboy

内部数据结构决定Elasticsearch上的SQL query只是在mimic SQL的行为。 像sorting by aggregation 这种操作有limitation是没办法的事。 你不能完全把他当sql engine。 如果要大量的run这种query还是建议在上面用Presto