ElasticSearch:在字段密钥集合
我正在尝试在Kibana中创建一个与我网站中最受欢迎的页面相关的小型仪表板。这些文件都存储在以下格式:ElasticSearch:在字段密钥集合
{
"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"
}
着有“关键字”映射类型为电动车,游客和路由,除了任何其他映射,您将需要。
然后,你可以汇总如下:
GET /{YOUR_INDEX}/_search
{
"query": {"match_all": {}},
"aggs": {
"page_views": {
"terms": {
"field": "route",
"size": 100
}
}
}
}
以上聚集会返回基于每个红衣主教“路线”价值数排名前100位的计数页面。
用你目前的结构做它会需要一些非常有趣的脚本,如果它甚至可能。
编辑*我想要说明的是,我假设您想要在您的结构之后的所有文档中进行汇总。如果您只是在基于其嵌套对象的单个文档中查找计数,则可能有一种方法。
不幸的是,我无法改变数据结构。另外,每个视图可以包含多个页面。 – vinnylinux
这个建议对我来说似乎是对的。每个视图都可以包含多个页面并不重要 - 它们只会映射到多个文档。如果您无法更改数据结构,您是否可以维护一个单独的索引,并定期使用新文档进行更新? – dshockley
我不认为你问的是实际上可能的。你有多少条路线?他们是否事先知道?如果是这样,您可以使用过滤器聚合。这并不理想(因为您必须手动写出所有路线),但它会起作用。 – dshockley