Kibana Aggregation Визуализация поля (ИД пользователя), имеющего несколько значений поля (имя_банка) - PullRequest
1 голос
/ 10 апреля 2019

Итак, у меня есть индекс с двумя полями userid и имя_банка. Каждый раз, когда пользователь получает новый банковский счет, добавляется значение с userid и именем банка, в котором пользователь открыл счет. Я должен использовать kibana и elasticsearch для создания визуализации (скажем, круговой диаграммы), которая отображает все количество пользователей, имеющих более 2 (или 4 это может изменить) банковских счетов в одном и том же названии банка.

Я попытался создать вложенные сегменты, но это дает две вещи: первая показывает общее количество названий банков, разделенных по их стоимости, а вторая показывает, сколько раз у каждого пользователя была учетная запись в этом банке. Я искал вокруг и думаю, что должен использовать sub_doc_count где-то в aggs, но не могу понять, где и как это сделать.

Так, например, для следующих данных:

[{
  "_id": 10001,
  "userid": 0,
  "bank_name": "xyz bank",
  "date": "2019-01-23"
},
 {
   "_id": 10002,
   "userid": 0,
   "bank_name": "abc bank",
   "date": "2019-01-29"
 },
 {
   "_id": 10003,
   "userid": 1,
   "bank_name": "xyz bank",
   "date": "2019-01-31"
 },
 {
   "_id": 10004,
   "userid": 2,
   "bank_name": "def bank",
   "date": "2019-02-02"
 },
 {
   "_id": 10005,
   "userid": 2,
   "bank_name": "abc bank",
   "date": "2019-02-03"
 },
 {
   "_id": 10006,
   "userid": 1,
   "bank_name": "xyz bank",
   "date": "2019-02-10"
 },
 {
   "_id": 10007,
   "userid": 1,
   "bank_name": "abc bank",
   "date": "2019-02-14"
 },
 {
   "_id": 10008,
   "userid": 0,
   "bank_name": "abc bank",
   "date": "2019-02-20"
 },
 {
   "_id": 10009,
   "userid": 0,
   "bank_name": "xyz bank",
   "date": "2019-02-20"
 }]

Таким образом, для вышесказанного следует получить круговую диаграмму только с двумя пользователями: 0 и 1 с 0, имеющим счет # 2, и 1, имеющим счет # 1 с точки зрения метрики. Пользователь 2 не будет включен, поскольку оба банковских счета двух уникальны или никогда не повторяются.

1 Ответ

0 голосов
/ 11 апреля 2019

К сожалению, я не знаю, как достичь желаемого результата, используя собственную визуализацию круговой диаграммы Kibana - однако для выполнения запрошенных агрегаций вы можете использовать что-то похожее на следующее:

GET bank_users/_search
{
  "size": 0,
  "aggs": {
    "accounts_per_user": {
      "terms": {
        "field": "userid"
      },
      "aggs": {
        "accounts_per_bank": {
          "terms": {
            "field": "bank_name.keyword"
          },
          "aggs": {
            "filtered_banks": {
              "bucket_selector": {
                "buckets_path": {
                  "accounts": "_count"
                },
                "script": "params.accounts >= 2"
              }
            }
          }
        }
      }
    }
  }
}

Это возвращаетследующее из вашего образца набора данных:

{
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 9,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "accounts_per_user" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : 0,
          "doc_count" : 4,
          "accounts_per_bank" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "abc bank",
                "doc_count" : 2
              },
              {
                "key" : "xyz bank",
                "doc_count" : 2
              }
            ]
          }
        },
        {
          "key" : 1,
          "doc_count" : 3,
          "accounts_per_bank" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "xyz bank",
                "doc_count" : 2
              }
            ]
          }
        },
        {
          "key" : 2,
          "doc_count" : 2,
          "accounts_per_bank" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [ ]
          }
        }
      ]
    }
  }
}

Обратите внимание, что используется агрегирование по умолчанию terms, поэтому следует помнить об ограничениях (т. е. факте, что не все документы могут быть получены, что приводит к неточному подсчету больших наборов данных свысокая мощность и низкий параметр size - ref: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html).

Вы можете использовать это для создания визуализации Vega.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...