elasticsearch ElasticSearch:在字段键上聚合
我正试图在Kibana中创建一个与我的网站中最流行的页面相关的小仪表板。文件以以下格式存储:elasticsearch ElasticSearch:在字段键上聚合,elasticsearch,kibana,elasticsearch,Kibana,我正试图在Kibana中创建一个与我的网站中最流行的页面相关的小仪表板。文件以以下格式存储: { "ev": "pageview", "meta": { "visitor": "blah", "pages": { "/my-route": { "title": "My route", "desc": "foo bar" }, "/my-route#2": {
{
"ev": "pageview",
"meta": {
"visitor": "blah",
"pages": {
"/my-route": {
"title": "My route",
"desc": "foo bar"
},
"/my-route#2": {
"title": "My route 2"
"desc": "foo bar"
},
}
}
}
因此,我试图创建一个表来显示:
Page Views
/foo 10
/foo#2 10
/bar 5
但是,我似乎无法基于对象的键进行聚合。可能吗 我认为,您的数据结构将给您带来困难,让您无法完成所要做的事情 我建议您将其更改为:
{
"ev": "pageview",
"visitor" :"blah",
"route": "/my-route",
"title":"My route",
"desc" foo bar"
}
除了您需要的任何其他映射之外,ev、访客和路线的“关键字”映射类型
然后你可以这样聚合:
GET /{YOUR_INDEX}/_search
{
"query": {"match_all": {}},
"aggs": {
"page_views": {
"terms": {
"field": "route",
"size": 100
}
}
}
}
上述聚合将基于每个基数“route”值的计数返回前100个计数页
如果可能的话,使用当前的结构进行操作需要一些非常有趣的脚本
编辑*我想指出的是,我假设您希望在遵循您的结构的所有文档中进行聚合。如果您只是根据嵌套对象在单个文档中查找计数,可能有一种方法。不幸的是,我无法更改数据结构。而且,每个视图可以包含多个页面。这个建议对我来说似乎是正确的。每个视图可以包含多个页面并不重要——它们只会映射到多个文档。如果你不能改变数据结构,你能保持一个单独的索引,用新的文档定期更新吗?我认为你所要求的实际上是不可能的。你们有多少条路线?他们事先知道吗?如果是这样,您可以使用过滤器聚合。这并不理想(因为您必须手动写出所有路由),但它会起作用。