ElasticSearch:聚合字段键

时间:2017-10-16 21:19:53

标签: elasticsearch kibana

我正在尝试在Kibana中创建一个与我网站上最受欢迎的网页相关的小仪表板。文档按以下格式存储:

{
    "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

但是,我似乎无法根据对象的密钥进行聚合。那可能吗?

1 个答案:

答案 0 :(得分:1)

我认为您的数据结构会给您带来困难时间。

我建议你改成它:

get

使用ev,visitor和route的“关键字”映射类型,以及您需要的其他映射。

然后你可以这样聚合:

Add-Type -Path ".\Other\VLC\Vlc.DotNet.Core.dll"
Add-Type -Path ".\Other\VLC\Vlc.DotNet.Core.Interops.dll"

$Cameras = New-Object System.Collections.ArrayList
$Test = New-Object System.Uri("rtsp://192.168.0.50/axis-media/media.amp?camera=1")
$Cameras.Add($Test)

$VlcLibDirPath = (Get-Location).Path + ".\Other\VLC\libvlc_x64"
$VlcLibDir = New-Object System.IO.DirectoryInfo($VlcLibDirPath)
$VlcOpt = "--rtsp-user=admin", "--rtsp-pwd=12345"
$Plyr = New-Object Vlc.DotNet.Core.VlcMediaPlayer($VlcLibDir, $VlcOpt)
for ($i=0; $i -lt $Cameras.Count; $i++)
{
    $Plyr.SetMedia($Cameras[$i]) #Fails here with System.AccessViolationException
    $Plyr.Play
    $Plyr.Stop
}

上述聚合将根据每个基本“路线”值的计数返回前100个计数页面。

使用当前结构进行操作需要一些非常有趣的脚本,如果它甚至可能的话。

编辑*我想要注意,我假设您希望在您的结构之后聚合所有文档。如果您只是根据其嵌套对象查找该单个文档中的计数,则可能有一种方法。