2014-10-07 4 views
0

Я хотел бы выполнить некоторые агрегации для наиболее активных 10% пользователей.Как я могу получить наиболее активных 10% пользователей в Elasticsearch?

Позволяет сказать, что мой документ является:

{ 
    "createDate": "2014-10-7T05:43:02", 
    "user":"Raz", 
    "os":"IOS" 
}, 
{ 
    "createDate": "2014-10-7T07:43:02", 
    "user":"Raz", 
    "os":"Android" 
}, 
{ 
    "createDate": "2014-10-7T09:43:02", 
    "user":"Jim", 
    "os":"Android" 
} 

и моя агрегация:

"aggs": { 
"time_aggs": { 
    "date_histogram": { 
    "field": "createDate", 
    "interval": "10m" 
    },"aggs": { 
    "device_os":{ 
     "term": { 
      "os":"IOS" 
     } 
     } 
    } 
} 

Что я должен добавить в агрегатах применять их только на самых 10% активных пользователей?

Спасибо.

+1

Как вы определяете "активный пользователь"? –

+0

Кто-то, кто в этом случае (представлен документом выше) в определенный период времени. Например, в примере, который я представил, Raz более активен, чем Jim 7 октября. – user3767296

+0

Возможно, вы сможете использовать агрегацию процентов для этого и, возможно, объединить его с запросом терминов для пользователя. Не совсем уверен, возможно ли это, хотя это возможно, используя некоторые скрипты. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html –

ответ

0

На данный момент я реализую это, вычисляя количество отдельных пользователей в определенном диапазоне времени (используя агрегацию мощности). Затем я суммирую термин clientId с размером, который отражает 10% от отдельных пользователей.

Смежные вопросы