2016-03-09 55 views
0

在Elastisearch索引中,我收集用戶的評分。也就是說,在索引 localhost:9200/content_ratings/我們有content_rating的文件。該文件類型有以下字段:Elasticsearch,Kibana group by /彙總文件

  • 標題
  • 作者日期
  • 網址
  • 評級
  • ratedBy

比方說,我們的索引包含下列文件:

{ 
    "title": "Data Quality", "author": "John Queue", "url": "/news/2015/data-quality", "rating":3, "ratedBy": "userA" 
} 
{ 
    "title": "Data Quality", "author": "John Queue", "url": "/news/2015/data-quality", "rating":1, "ratedBy": "userB" 
} 
{ 
    "title": "User Story Estimations", "author": "Abby Edye", "url": "/news/2014/story-splitting", "rating":5, "ratedBy": "userC" 
} 

我需要一個報告(Elasticsearch 1.0,Kibana 3),它顯示每個評分項目並計算其平均評分。因此,我們需要「分組依據URL」,並有這樣的事情:

"title": "Data Quality", "author": "John Queue", "url": "/news/2015/data-quality", "avgRating":2 
"title": "User Story Estimations", "author": "Abby Edye", "url": "/news/2014/story-splitting", "avgRating":5 

a)是在有一個ES方式使用類似的結構「按組」?

b)ES中有沒有一種方法來查詢由a)(另一個)查詢返回的結果? - 我在問這個問題是因爲從彙總的結果來看,在另一份報告(Kibana小組)中,我需要指出項目評分是好的還是好的(5)?

我是新ES/kibana和大量使用Google最接近我的要求後,是這些鏈接: How do I group documents in elasticsearch by a single field? https://www.elastic.co/guide/en/elasticsearch/reference/1.3/search-aggregations-metrics-top-hits-aggregation.html

我已經試過條款方面這是隱含我目前SET-支持(ES 1.0,kibana3),但遠不及我所需...

回答

1

是的,你可以使用elasticsearch中的「aggs」來執行groupby動作。

我在這裏有一個樣本,你可以知道如何使你的: 在這裏我已經使用嵌套集合(groupby)來獲得在特殊年齡段的每個國家的人的平均年齡。

GET customer/_search 
{ 
"size": 0, 
    "aggs": { 
     "group_by_state": { 
      "range": { 
       "field": "age", 
       "ranges": [ 
         { "from": 20,"to": 40 }, 
         { "from": 40, "to": 60 }, 
         { "from": 60, "to": 100} 
       ] 
      }, 
      "aggs": { 
       "group_by_nationality": { 
        "terms": { 
         "field": "nationality.keyword" 
        }, 
        "aggs": { 
         "average_age": { 
          "avg": { 
           "field": "age" 
          } 
         } 
        } 
       } 
      } 
     }    
    } 
}