2017-10-16 2 views
0

Ich versuche, ein kleines Dashboard in Kibana im Zusammenhang mit den beliebtesten Seiten auf meiner Website zu erstellen. Die Dokumente werden in folgendem Format gespeichert:ElasticSearch: Aggregation auf Feldschlüssel

{ 
    "ev": "pageview", 
    "meta": { 
     "visitor": "blah", 
     "pages": { 
     "/my-route": { 
      "title": "My route", 
      "desc": "foo bar" 
     }, 
     "/my-route#2": { 
      "title": "My route 2" 
      "desc": "foo bar" 
     }, 
     } 
    } 
} 

Also, ich versuche, eine Tabelle zu erstellen, die diese zeigt: Jedoch

Page  Views 
/foo  10 
/foo#2 10 
/bar  5 

, ich kann nicht auf Basis aggregieren zu können, scheinen auf einem Schlüssel von einem Objekt. Ist das möglich?

+0

Ich glaube nicht, was Sie fragen, ist tatsächlich möglich. Wie viele Routen hast du? Sind sie im Voraus bekannt? Wenn dies der Fall ist, können Sie eine Filteraggregation verwenden. Es ist nicht ideal (weil Sie alle Routen manuell schreiben müssen), aber es wird funktionieren. – dshockley

Antwort

1

Ich denke, Ihre Datenstruktur wird Ihnen eine schwierige Zeit geben für das, was Sie versuchen zu tun.

Ich würde vorschlagen, Sie es dies ändern:

{ 
    "ev": "pageview", 
    "visitor" :"blah", 
    "route": "/my-route", 
    "title":"My route", 
    "desc" foo bar" 
} 

Mit einem „keyword“ Mapping-Typ für ev, Besucher und Strecke, zusätzlich zu was auch immer anderen Zuordnungen Sie benötigen.

Dann könnte man wie folgt zusammenfassen:

GET /{YOUR_INDEX}/_search 
{ 
    "query": {"match_all": {}}, 
    "aggs": { 
    "page_views": { 
     "terms": { 
     "field": "route", 
     "size": 100 
     } 
    } 
    } 
} 

Die obige Aggregation würde die Top-100-Zählung Seite zurückzukehren, basierend auf den Zählungen jeden Kardinal „route“ Wertes.

Wenn du es mit deiner aktuellen Struktur machst, würde es einige ziemlich interessante Skripte erfordern, wenn es überhaupt möglich ist.

Bearbeiten * Ich wollte zur Kenntnis nehmen, dass ich davon ausgehe, dass Sie über alle Dokumente, die Ihrer Struktur folgen, aggregieren möchten. Wenn Sie nur nach Einzeldokumenten suchen, die auf den verschachtelten Objekten basieren, gibt es möglicherweise einen Ansatz.

+0

Leider kann ich die Datenstruktur nicht ändern. Außerdem kann jede Ansicht mehrere Seiten enthalten. – vinnylinux

+1

Dieser Vorschlag scheint mir richtig. Es spielt keine Rolle, dass jede Ansicht mehrere Seiten enthalten kann - sie werden nur mehreren Dokumenten zugeordnet. Wenn Sie die Datenstruktur nicht ändern können, können Sie einen separaten Index pflegen, der regelmäßig mit den neuen Dokumenten aktualisiert wird? – dshockley