Elastic Stack 노트 (7) Elasticsearch 5.6 중합 분석

25748 단어
블 로그 주소:http://www.moonxy.com
머리말
Elasticsearch 는 분포 식 전체 텍스트 검색엔진 으로 색인 과 검색 은 Elasticsarch 의 기본 기능 입 니 다.또한 Elasticsearch 의 취 합 (Aggregations) 기능 도 강력 해 데이터 적 으로 복잡 한 분석 통 계 를 할 수 있다.ES 가 제공 하 는 중합 분석 기능 은 주로 지표 중합, 통 중합, 파이프 중합 과 행렬 중합 이 있다.주로 앞의 두 가지, 즉 지표 중합 과 통 중합 을 파악 해 야 한다.
취 합 분석 공식 문서: Aggregations
중합 분석
2.1 지표 집합
지표 집합 홈 페이지 문서: Metric
지표 집합 에는 주로 min, max, sum, avg, stats, extended 가 포함 된다.stats、value_count 등 취 합 은 SQL 의 취 합 함수 에 해당 합 니 다.
지표 집합 에는 다음 과 같은 집합 이 포함 되 어 있 습 니 다.
  • Avg Aggregation
  • Cardinality Aggregation
  • Extended Stats Aggregation
  • Geo Bounds Aggregation
  • Geo Centroid Aggregation
  • Max Aggregation
  • Min Aggregation
  • Percentiles Aggregation
  • Percentile Ranks Aggregation
  • Scripted Metric Aggregation
  • Stats Aggregation
  • Sum Aggregation
  • Top Hits Aggregation
  • Value Count Aggregation

  • 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 와 비슷 합 니 다.
    통 중합 은 다음 과 같은 중합 을 포함한다.
  • Adjacency Matrix Aggregation
  • Children Aggregation
  • Composite Aggregation
  • Date Histogram Aggregation
  • Date Range Aggregation
  • Diversified Sampler Aggregation
  • Filter Aggregation
  • Filters Aggregation
  • Geo Distance Aggregation
  • GeoHash grid Aggregation
  • Global Aggregation
  • Histogram Aggregation
  • IP Range Aggregation
  • Missing Aggregation
  • Nested Aggregation
  • Range Aggregation
  • Reverse nested Aggregation
  • Sampler Aggregation
  • Significant Terms Aggregation
  • Significant Text Aggregation
  • Terms Aggregation

  • 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
  • Avg Bucket Aggregation
  • Derivative Aggregation
  • Max Bucket Aggregation
  • Min Bucket Aggregation
  • Sum Bucket Aggregation
  • Stats Bucket Aggregation
  • Extended Stats Bucket Aggregation
  • Percentiles Bucket Aggregation
  • Moving Average Aggregation
  • Cumulative Sum Aggregation
  • Bucket Script Aggregation
  • Bucket Selector Aggregation
  • Bucket Sort Aggregation
  • Serial Differencing Aggregation

  • Pipeline Aggregations 가 처리 하 는 대상 은 문서 가 아 닌 다른 취 합 된 출력 입 니 다.
    2.4 매트릭스 집합
    매트릭스 취 합 홈 페이지 문서: Matrix Aggregations
  • Matrix Stats

  • Matrix Stats 집합 은 문서 필드 의 다음 통계 정 보 를 계산 하 는 데 사용 되 는 수치 형 집합 입 니 다.
    계수: 계산 과정 에서 각 필드 의 견본 수량;
    평균 값: 필드 마다 데이터 의 평균 값;
    분산: 각 필드 견본 데이터 가 평균 값 에서 벗 어 나 는 정도;
    편도: 각 필드 의 견본 데이터 가 평균 값 근처에 있 는 비대 칭 분포 상황 을 계량 화 합 니 다.
    피크: 각 필드 견본 데이터 분포 의 모양 을 계량 화 합 니 다.
    협 방 차: 한 필드 의 데이터 가 다른 필드 의 데이터 변화 정도 에 따라 양 적 으로 설명 하 는 행렬;
    상관 성: 두 필드 데이터 간 의 분포 관 계 를 묘사 하고 협 방 차 행렬 의 수 치 는 [- 1, 1] 사이 에 있다.
    주로 두 수치 형 필드 간 의 관 계 를 계산 하 는 데 쓰 인 다.로그 기록 길이 와 HTTP 상태 코드 간 의 관 계 를 계산 합 니 다.
    GET /_search
    {
        "aggs": {
            "statistics": {
                "matrix_stats": {
                    "fields": ["log_size", "status_code"]
                }
            }
        }
    }

    좋은 웹페이지 즐겨찾기