Elastic Stack 노트 (7) Elasticsearch 5.6 중합 분석
머리말
Elasticsearch 는 분포 식 전체 텍스트 검색엔진 으로 색인 과 검색 은 Elasticsarch 의 기본 기능 입 니 다.또한 Elasticsearch 의 취 합 (Aggregations) 기능 도 강력 해 데이터 적 으로 복잡 한 분석 통 계 를 할 수 있다.ES 가 제공 하 는 중합 분석 기능 은 주로 지표 중합, 통 중합, 파이프 중합 과 행렬 중합 이 있다.주로 앞의 두 가지, 즉 지표 중합 과 통 중합 을 파악 해 야 한다.
취 합 분석 공식 문서: Aggregations
중합 분석
2.1 지표 집합
지표 집합 홈 페이지 문서: Metric
지표 집합 에는 주로 min, max, sum, avg, stats, extended 가 포함 된다.stats、value_count 등 취 합 은 SQL 의 취 합 함수 에 해당 합 니 다.
지표 집합 에는 다음 과 같은 집합 이 포함 되 어 있 습 니 다.
Aggregations that keep track and compute metrics over a set of documents.
문서 에서 스 케 일 을 추적 하고 계산 하 는 집합다음 max 집합 을 예 로 들 면:
Max Aggregation
max 취 합 홈 페이지 문서: Max Aggregation
max 취 합 은 최대 치 통계 에 사 용 됩 니 다. SQL 의 취 합 함수 max () 의 역할 과 유사 합 니 다. 그 중에서 'max price' 는 사용자 정의 취 합 이름 입 니 다.
##Max Aggregation
GET books/_search
{
"size": 0,
"aggs": {
"max_price": {
"max": {
"field": "price"
}
}
}
}
결 과 를 다음 과 같이 되 돌려 줍 니 다.
{
"took": 6,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"max_price": {
"value": 81.4
}
}
}
Cardinality Aggregation
기수 통계 취 합 홈 페이지 문서: Cardinality Aggregation
Cardinality Aggregation 은 기수 조회 에 사용 되 는데 SQL 과 유사 한 distinct 작업 을 먼저 수행 하고 집합 중의 중복 항목 을 제거 한 다음 에 배 중 된 집합 길 이 를 통계 하 는 역할 을 한다.
##Cardinality Aggregation
GET books/_search
{
"size": 0,
"aggs": {
"all_language": {
"cardinality": {
"field": "language"
}
}
}
}
결 과 를 다음 과 같이 되 돌려 줍 니 다.
{
"took": 41,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"all_language": {
"value": 3
}
}
}
Stats Aggregation
기본 통계 취 합 홈 페이지 문서: Stats Aggregation
Stats Aggregation 은 기본 통계 에 사용 되 며, count, max, min, avg, sum 등 5 개 지 표를 한 번 에 되 돌려 줍 니 다.다음 과 같다.
##Stats Aggregation
GET books/_search
{
"size": 0,
"aggs": {
"stats_pirce": {
"stats": {
"field": "price"
}
}
}
}
결 과 를 다음 과 같이 되 돌려 줍 니 다.
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"stats_pirce": {
"count": 5,
"min": 46.5,
"max": 81.4,
"avg": 63.8,
"sum": 319
}
}
}
Extended Stats Aggregation
고급 통계 취 합 홈 페이지 문서: Extended Stats Aggregation
고급 통계 에 사용 되 는 것 은 기본 통계 기능 과 유사 하지만 기본 통계 보다 4 개의 통계 결과 가 많 을 것 이다. 제곱 과 분산, 표준 차, 평균치 가 두 개의 표준 차 를 더 하거나 줄 이 는 구간 이다.
##Extended Stats Aggregation
GET books/_search
{
"size": 0,
"aggs": {
"extend_stats_pirce": {
"extended_stats": {
"field": "price"
}
}
}
}
응답 결과 되 돌리 기:
{
"took": 14,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"extend_stats_pirce": {
"count": 5,
"min": 46.5,
"max": 81.4,
"avg": 63.8,
"sum": 319,
"sum_of_squares": 21095.46,
"variance": 148.65199999999967,
"std_deviation": 12.19229264740638,
"std_deviation_bounds": {
"upper": 88.18458529481276,
"lower": 39.41541470518724
}
}
}
}
Value Count Aggregation
문서 수량 집합 홈 페이지 문서: Value Count Aggregation
Value Count Aggregation 은 필드 에 따라 문서 의 수량 을 집계 할 수 있 습 니 다.
##Value Count Aggregation
GET books/_search
{
"size": 0,
"aggs": {
"doc_count": {
"value_count": {
"field": "author"
}
}
}
}
결 과 를 다음 과 같이 되 돌려 줍 니 다.
{
"took": 6,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"doc_count": {
"value": 5
}
}
}
주의:
text 형식의 필드 는 정렬 과 집합 을 할 수 없습니다 (terms Aggregation 제외). title 필드 를 집합 합 니 다. title 은 text 로 정의 합 니 다.
GET books/_search
{
"size": 0,
"aggs": {
"doc_count": {
"value_count": {
"field": "title"
}
}
}
}
결 과 를 다음 과 같이 되 돌려 줍 니 다.
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [title] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "books",
"node": "6n3douACShiPmlA9j2soBw",
"reason": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [title] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
}
}
]
},
"status": 400
}
2.2 통 중합
통 취 합 홈 페이지 문서: Bucket Aggregations
Bucket 은 하나의 통 으로 이해 할 수 있 습 니 다. 문서 의 내용 을 옮 겨 다 니 며 특정한 요구 에 부합 되 는 것 은 하나의 통 에 넣 습 니 다. 통 은 SQL 의 SQL 의 group by 와 비슷 합 니 다.
통 중합 은 다음 과 같은 중합 을 포함한다.
terms Aggregation 은 그룹 집합 에 사 용 됩 니 다. 각 프로 그래 밍 언어 에 속 하 는 책의 수량 을 통계 합 니 다. 다음 과 같 습 니 다.
GET books/_search
{
"size": 0,
"aggs": {
"terms_count": {
"terms": {
"field": "language"
}
}
}
}
결 과 를 다음 과 같이 되 돌려 줍 니 다.
{
"took": 31,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_count": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java",
"doc_count": 2
},
{
"key": "python",
"doc_count": 2
},
{
"key": "javascript",
"doc_count": 1
}
]
}
}
}
terms 분 통 을 바탕 으로 각 통 에 대해 지표 중합 도 할 수 있다.예 를 들 어 각 도서 의 무승부 가격 을 통계 하려 면 먼저 language 필드 에 따라 Terms Aggregation 을 한 다음 에 Avg Aggregation 을 진행 할 수 있 습 니 다. 조회 문 구 는 다음 과 같 습 니 다.
GET books/_search
{
"size": 0,
"aggs": {
"terms_count": {
"terms": {
"field": "language"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
결 과 를 다음 과 같이 되 돌려 줍 니 다.
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_count": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java",
"doc_count": 2,
"avg_price": {
"value": 58.35
}
},
{
"key": "python",
"doc_count": 2,
"avg_price": {
"value": 67.95
}
},
{
"key": "javascript",
"doc_count": 1,
"avg_price": {
"value": 66.4
}
}
]
}
}
}
Range Aggregation
Range Aggregation 은 범위 집합 으로 데이터 의 분포 상황 을 반영 하 는 데 사용 된다.예 를 들 어 books 색인 에 있 는 도 서 를 가격 구간 에 따라 0 ~ 50 ~ 80, 80 이상 범위 에 집합 하면 다음 과 같다.
GET books/_search
{
"size": 0,
"aggs": {
"price_range": {
"range": {
"field": "price",
"ranges": [
{"to": 50},
{"from": 50, "to": 80},
{"from": 80}
]
}
}
}
}
결 과 를 다음 과 같이 되 돌려 줍 니 다.
{
"took": 16,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"price_range": {
"buckets": [
{
"key": "*-50.0",
"to": 50,
"doc_count": 1
},
{
"key": "50.0-80.0",
"from": 50,
"to": 80,
"doc_count": 3
},
{
"key": "80.0-*",
"from": 80,
"doc_count": 1
}
]
}
}
}
Range Aggregation 은 수치 형 필드 뿐만 아니 라 날짜 유형 에 도 작용 할 수 있다.Date Range Aggregation 은 날짜 형식의 범위 집합 에 사 용 됩 니 다. Range Aggregation 과 의 차 이 는 날짜 의 시작 과 끝 에 수학 표현 식 을 사용 할 수 있 습 니 다.
2.3 파이프 집합
파이프 취 합 홈 페이지 문서: Pipeline Aggregations
Pipeline Aggregations 가 처리 하 는 대상 은 문서 가 아 닌 다른 취 합 된 출력 입 니 다.
2.4 매트릭스 집합
매트릭스 취 합 홈 페이지 문서: Matrix Aggregations
Matrix Stats 집합 은 문서 필드 의 다음 통계 정 보 를 계산 하 는 데 사용 되 는 수치 형 집합 입 니 다.
계수: 계산 과정 에서 각 필드 의 견본 수량;
평균 값: 필드 마다 데이터 의 평균 값;
분산: 각 필드 견본 데이터 가 평균 값 에서 벗 어 나 는 정도;
편도: 각 필드 의 견본 데이터 가 평균 값 근처에 있 는 비대 칭 분포 상황 을 계량 화 합 니 다.
피크: 각 필드 견본 데이터 분포 의 모양 을 계량 화 합 니 다.
협 방 차: 한 필드 의 데이터 가 다른 필드 의 데이터 변화 정도 에 따라 양 적 으로 설명 하 는 행렬;
상관 성: 두 필드 데이터 간 의 분포 관 계 를 묘사 하고 협 방 차 행렬 의 수 치 는 [- 1, 1] 사이 에 있다.
주로 두 수치 형 필드 간 의 관 계 를 계산 하 는 데 쓰 인 다.로그 기록 길이 와 HTTP 상태 코드 간 의 관 계 를 계산 합 니 다.
GET /_search
{
"aggs": {
"statistics": {
"matrix_stats": {
"fields": ["log_size", "status_code"]
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.