1

次のようなマッピングと例のデータがあります。

{ 
   date : 'yyyy-mm-dd',
   action : 'click',
   userId : 'not_analysed id in this field',
   user : {
     name : 'John',
     age : '28',
     email : 'john@awesome.com',
     country : 'US'
   }
}

このような何百万ものレコードがあり、これはユーザー アクティビティ ログであるため重複もあり、日付列を使用して日付ヒストグラムの一意の userId に基づいてそれらをグループ化したいと考えています。カーディナリティを使用して、日付ヒストグラムに基づいて一意のカウントを取得するのは非常に簡単です。

一意のユーザー バケットに基づいて最終結果を取得し、ユーザー フィールドをグループ化し、次のようにプロファイルに基づいてカウントを取得する場合。1 月の時点で、約 10,000 のアクティビティがありましたが、ユニーク ユーザーは 1,000 人しかいませんでした。これらのユーザーに基づいて、ユーザー フィールド データを取得して人口統計を確認したいとします。10,000 レコードを意味し、userId でカーディナリティを実行すると、1,000 レコードになります。この 1,000 件のレコードに基づいて、次のような結果が必要です。10,000 レコードから個別の 1,000 レコードに統合する方法と、それらのレコードから、以下のような回答になります。

Expected end results:
{
    '2016-01-01',
    aggs: {
        [{
            age: 28,
            count: 100
        }, {
            age: 27,
            count: 500
        }, {
            country: 'US',
            count: 200
        }, {
            country: 'Canada',
            count: 200
        }]
    },
    '2016-02-01',
    aggs: {
        [{
            age: 29,
            count: 200
        }, {
            age: 31,
            count: 1000
        }, {
            country: 'Mexico',
            count: 400
        }, {
            country: 'UK',
            count: 400
        }]
    }

結論として、計算する一般的な方法はありますか?これは、用語を使用したり、パイプ集計を使用したりすることによって得られますか?

助けてください。

4

1 に答える 1

0

必要なのは、メインの日付ヒストグラム集計の下にある 3 つの異なるサブ集計です。クエリは次のようになります。

クエリは、データとユニーク ユーザー数のterms集計で構成されます。agecountrycardinality

各項の集計のサイズを大きくして、目的の結果を得ることができます。

{
  "aggs": {
    "user_data_over_time": {
      "date_histogram": {
        "field": "date",
        "interval": "day", 
        "format": "yyyy-MM-dd"
      },
      "aggs": {
        "unique_users": {
          "cardinality": {
            "field": "userId"
          }
        },
        "age_data":{
          "terms": {
            "field": "user.age",
            "size": 10
          }
        },
        "country_data":{
          "terms": {
            "field": "user.country",
            "size": 10
          }
        }
      }
    }
  }
}
于 2016-07-30T12:43:30.467 に答える