2016-03-09 2 views
0

В индексе Elastisearch я собираю оценки от пользователей. То есть в индексе localhost: 9200/content_ratings/ У нас есть документы типа content_rating. Этот тип документа имеет следующие поля:Elasticsearch, группа Kibana по/агрегированным документам

  • титул
  • Автор
  • URL
  • рейтинг
  • 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 

а) есть способ в ES использовать «группу по» эквивалентным конструкциям?

b) есть ли способ в ES для запроса результатов, возвращаемых (другим) запросом из a)? - Я спрашиваю об этом, потому что из агрегированных результатов в другом отчете (панель Kibana) мне нужно будет подсчитать, как можно оценивать товар (4) или отлично (5)?

Я новичок в ES/kibana и после того, как много прибегая к помощи ближе всего к моему требованию эти ссылки: 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

я пытался терминов огранки который неявно поддерживаются моим текущим комплекте- (ES 1.0, kibana3), но нигде рядом с тем, что мне нужно ...

ответ

1

Да, вы можете использовать «aggs» в elasticsearch для выполнения группового действия.

У меня есть образец здесь, где вы можете получить представление о том, как сделать свой: здесь Я использовал вложенные агггитации (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" 
          } 
         } 
        } 
       } 
      } 
     }    
    } 
} 
Смежные вопросы