Запрос Elasticsearch для обработки данных журнала - PullRequest
2 голосов
/ 14 июня 2019

У меня есть журнал событий сайта электронной коммерции в Elasticsearch.Каждое событие является записью в ES

{
    "_index": "event_log",
    "_type": "log_type",
    "_id": "3ud-kmoBazYRVz7KCgIy",
    "_score": 1,
    "_source": {
      "user_id": 123,
      "event": "click",
      "category": "abc",
      "product_id": 1112
    }
  },
  {
    "_index": "event_log",
    "_type": "log_type",
    "_id": "4Od-kmoBazYRVz7KCgLr",
    "_score": 1,
    "_source": {
      "user_id": 123,
      "event": "click",
      "category": "abc",
      "product_id": 1118
    }
  },
  {
    "_index": "event_log",
    "_type": "log_type",
    "_id": "4ud-kmoBazYRVz7KkwL2",
    "_score": 1,
    "_source": {
      "user_id": 123,
      "event": "cart",
      "category": "xyz",
      "product_id": 1
    }
  },
  {
    "_index": "event_log",
    "_type": "log_type",
    "_id": "2ud-kmoBazYRVz7KCALB",
    "_score": 1,
    "_source": {
      "user_id": 123,
      "event": "cart",
      "category": "xyz",
      "product_id": 11
    }
  },

Я хочу получить список всех группировок product_id s event, category, user.

Ожидаемый результат:

{"click": {
   "abc": {
     "123": {
       "product_id": [1112, 1118]
      }
    }
   },
 "cart": {
   "xyz": {
     "123": {
       "product_id": [1, 11]
      }
    }
   }
  }   

У меня будут миллионы записей в индексе.Запрос всех записей и их обработка занимают много времени.Есть ли способ произвести вывод в одном запросе?Я уверен, что невозможно сгенерировать точно в данном формате.Что-то рядом с ним очень полезно.

1 Ответ

3 голосов
/ 14 июня 2019

Привет, вот мое предложение (первая попытка)

GET event_log/_search
{
  "size": 0,
  "aggs": {
    "event": {
      "terms": {
        "field": "event"
      },
      "aggs": {
        "category": {
          "terms": {
            "field": "category"
          },
          "aggs": {
            "product_id": {
              "terms": {
                "field": "product_id"
              }
            }
          }
        }
      }
    }
  }

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