首页 > 解决方案 > Elasticsearch GROUP BY 列 HAVING COUNT > x

问题描述

在 SQL 中,如果我有一个示例表 my_site_visits 显示我的网站用户访问了哪些页面:

user_id,url
1,index.html
1,index.html
1,foobar.html
1,index.js
2,a.html
2,b.html
2,index.html
3,foo.js
3,foo.js
4,bar.js

然后我可以找到访问过多个唯一页面的用户,例如

SELECT user_id, COUNT(*) unique_pages_visited
FROM (
    SELECT DISTINCT user_id, url
    FROM my_site_visits
)
GROUP BY user_id
HAVING unique_pages_visited > 1

结果:

user_id,unique_pages_visited
1,3
2,3

假设我添加到 Elastic 的 JSON 采用类似的形式,是否有在 Elastic 中执行此操作的方法,例如

{
    "user_id": n,
    "url": string,
    [Various other Elastic headers]
}

也可以在 Kibana 中本地执行此操作,还是我需要编写脚本来生成 Elastic 查询?

标签: sqlelasticsearchgroup-bykibanahaving

解决方案


你可以试试kibana的SQl翻译查询

例如
POST _xpack/sql/translate
{
"query": "SELECT * FROM IndexName WHERE id=1 ",
"fetch_size": 10
}

将您的查询与您的索引名称与您的 SQL 查询和列名称一起放置(名称应与弹性搜索中的名称匹配)。

如果它解决了您的问题,请标记答案。谢谢


推荐阅读