Aggregation을 수행할 때 사용할 데이터
cardinality
cardinality는 데이터의 종류가 몇 가지 있는지 확인하는 데 사용됩니다.
user_id가 1인 도큐먼트에 action이 몇가지 종류가 있는지 확인하기
우리는 데이터를 가져오는 것이 목적이 아닌 Aggregations을 수행하는 것이 목적이기 때문에 "size"를 0으로 설정하였습니다.
api | POST http://localhost:9200/test-log-index-2021-09-12/_search |
header | content-type: application/json |
body | { "size": 0, "query": { "bool": { "must": [ { "match": { "user_id": "1" } } ] } }, "aggs": { "cardinality_by_action": { "cardinality": { "field": "action" } } } } |
결과 보기
"cardinality_by_action"를 통해 user_id가 1인 도큐먼트에서는 action의 종류가 4개가 있다는 것을 확인할 수 있습니다.
실제로 "open_file", "close_file", "open_socket", "close_socket" 이렇게 4개입니다.
percentiles
각각의 값을 백분율로 보는 Aggregations입니다. 퍼센트 옵션을 설정하지 않으면 디폴트로 [1, 5, 25, 50, 75, 95, 99]로 설정됩니다.
user_id가 1인 도큐먼트에 duration의 백분율 확인하기
우리는 데이터를 가져오는 것이 목적이 아닌 Aggregations을 수행하는 것이 목적이기 때문에 "size"를 0으로 설정하였습니다.
api | POST http://localhost:9200/test-log-index-2021-09-12/_search |
header | content-type: application/json |
body | { "size": 0, "query": { "bool": { "must": [ { "match": { "user_id": "1" } } ] } }, "aggs": { "percentiles_by_duration": { "percentiles": { "field": "duration" } } } } |
결과 보기
하위 1%의 값은 100이며, 상위 99%의 값은 430인 것을 확인할 수 있습니다.
퍼센트를 설정하여 확인하기
이제는 디폴트 퍼센트값이 아닌 퍼센트를 사용자가 [25, 50, 75]로 지정하여 검색하겠습니다.
api | POST http://localhost:9200/test-log-index-2021-09-12/_search |
header | content-type: application/json |
body | { "size": 0, "query": { "bool": { "must": [ { "match": { "user_id": "1" } } ] } }, "aggs": { "percentiles_by_duration": { "percentiles": { "field": "duration", "percents": [ 25, 50, 75 ] } } } } |
결과 보기
percentile_ranks
지정한 값이 백분율로 몇 퍼센트 안에 속하는지 확인할 수 있습니다.
values라는 옵션으로 값을 지정할 수 있습니다.
user_id가 1인 도큐먼트에 필드 duration에 100, 200, 300의 값이 있다면 백분율 몇 퍼센트인지 확인하기
우리는 데이터를 가져오는 것이 목적이 아닌 Aggregations을 수행하는 것이 목적이기 때문에 "size"를 0으로 설정하였습니다.
api | POST http://localhost:9200/test-log-index-2021-09-12/_search |
header | content-type: application/json |
body | { "size": 0, "query": { "bool": { "must": [ { "match": { "user_id": "1" } } ] } }, "aggs": { "rank_by_duration": { "percentile_ranks": { "field": "duration", "values": [ 100, 200, 300 ] } } } } |
결과 보기
'Elasticsearch > Elasticsearch 데이터' 카테고리의 다른 글
Elasticsearch Aggregations#4 Sub Aggregations (0) | 2021.09.19 |
---|---|
Elasticsearch Aggregations#3 terms, ranges, histogram, date_range (0) | 2021.09.17 |
Elasticsearch Aggregations#1 min, max, sum, avg, stats (0) | 2021.09.13 |
Elasticsearch 검색하기#3 match, term, range 쿼리 (0) | 2021.09.10 |
Elasticsearch 검색하기#2 bool must, must_not, should (0) | 2021.09.08 |