2017-10-16 4 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" 
} 

를 EV, 방문자 및 경로에 대해 "키워드"매핑 유형으로, 당신이 필요합니다 어떤 다른 매핑에 추가.

그럼 당신은 다음과 같이 집계 수 :

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

위의 집계는 각 추기경 "경로"값의 개수에 따라 상위 100 카운트 페이지를 반환합니다.

현재 구조로 처리하는 경우 꽤 재미있는 스크립트가 필요합니다.

편집 * 구조에 뒤 따르는 모든 문서에서 집계하려고한다고 가정합니다. 중첩 된 객체를 기반으로 단일 문서 내에서 개수 만 찾고있는 경우 접근 방법이있을 수 있습니다.

+0

아쉽게도 데이터 구조를 변경할 수 없습니다. 또한 각보기에는 여러 페이지가 포함될 수 있습니다. – vinnylinux

+1

이 제안은 내게 맞는 것처럼 보입니다. 각보기에는 여러 페이지가 포함될 수 있습니다. 여러 페이지에 매핑됩니다. 데이터 구조를 변경할 수없는 경우 별도의 색인을 유지 관리 할 수 ​​있습니까? 주기적으로 새 문서로 업데이트 할 수 있습니까? – dshockley