@bioforge
Верстающий пыхер

Как правильно составить запрос на агрегацию?

Всем привет.

В эластике лежат документы:
{
    {
        "status_id" : 1,
        "client_id" : 2,
        "task_id"   : 3
    },
    {
        "status_id" : 2,
        "client_id" : 2,
        "task_id"   : 3
    },
    {
        "status_id" : 3,
        "client_id" : 2,
        "task_id"   : 3
    }
}


Нужно подсчитать status_id с переданными client_id и task_id.

Пример на sql:
SELECT status_id, COUNT(*) AS count FROM table WHERE client_id = 2 AND task_id = 3 GROUP BY status_id;


Подскажите, как составить такой запрос ?
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
dmitry-polushkin
@dmitry-polushkin
Инженер программного обеспечения
Попробуйте здесь погенерировать запросы: www.nlpcn.org:9999/web

Можно сильно упростить и оптимизировать, но в целом, примерно, так:

{
	"from": 0,
	"size": 0,
	"query": {
		"bool": {
			"must": {
				"bool": {
					"must": [
						{
							"match": {
								"client_id": {
									"query": 2,
									"type": "phrase"
								}
							}
						},
						{
							"match": {
								"task_id": {
									"query": 3,
									"type": "phrase"
								}
							}
						}
					]
				}
			}
		}
	},
	"_source": {
		"includes": [
			"status_id",
			"COUNT"
		],
		"excludes": []
	},
	"fields": "status_id",
	"aggregations": {
		"status_id;": {
			"terms": {
				"field": "status_id;",
				"size": 200
			},
			"aggregations": {
				"count": {
					"value_count": {
						"field": "_index"
					}
				}
			}
		}
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы