Elasticsearch 如何对json数组进行类group by的统计

问题描述

假如有2个文档,其中每个文档中都有一个内容为json的字段(content),例如:
文档1、content:[{"k": "1", "v": "2016"}, {"k": "2", "v": "2017"}, {"k": "3", "v": "2018"}, {"k": "4", "v": "2016"}, {"k": "5", "v": "2018"}]
文档2、content:[{"k": "1", "v": "2016"}, {"k": "2", "v": "2018"}, {"k": "3", "v": "2019"}]

我的目的:
1、按v值对所有文档进行分组统计,统计v值的种类,类似sql: select v,count(*) from .... group by v;
2、对指定的v值,对相关的k进行统计,类似sql: select k,count(*) from ...where v=2018... group by k;

问题出现的环境背景及自己尝试过哪些方法

目前在postgres做个尝试,数据量在百万级以上后效果不好

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

在postgres中代码:
1、v值统计
select json_array_elements(content::json)->>'v',count(*) from A GROUP BY json_array_elements(content::json)->>'v'

2、指定v值,对相关的k进行统计
select k,count(*) from (
SELECT json_array_elements(content::json)->>'k' as k ,json_array_elements(content::json)->>'v' as v FROM A where content @> '[{"v":"2018"}]'
) B GROUP BY k

你期待的结果是什么?实际看到的错误信息又是什么?

Elasticsearch中如何对这样的数据进行统计,方法是什么??? 求助.......

阅读 3.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进