2017-10-16 116 views
0

我正在嘗試在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 

但是,我似乎無法能夠根據彙總從一個對象的關鍵。那可能嗎?

+0

我不認爲你問的是實際上可能的。你有多少條路線?他們是否事先知道?如果是這樣,您可以使用過濾器聚合。這並不理想(因爲您必須手動寫出所有路線),但它會起作用。 – dshockley

回答

1

我認爲你的數據結構會給你一個很難做的事情。

我建議你把它改成這樣:

{ 
    "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位的計數頁面。

用你目前的結構做它會需要一些非常有趣的腳本,如果它甚至可能。

編輯*我想要說明的是,我假設您想要在您的結構之後的所有文檔中進行彙總。如果您只是在基於其嵌套對象的單個文檔中查找計數,則可能有一種方法。

+0

不幸的是,我無法改變數據結構。另外,每個視圖可以包含多個頁面。 – vinnylinux

+1

這個建議對我來說似乎是對的。每個視圖都可以包含多個頁面並不重要 - 它們只會映射到多個文檔。如果您無法更改數據結構,您是否可以維護一個單獨的索引,並定期使用新文檔進行更新? – dshockley