ElasticSearch 학습노트 24통 모으기

50011 단어

ElasticSearch 학습노트 24통 모으기

  • Date Range Aggregation(시간범위 집합)
  • Missing Values
  • Date Format/Pattern
  • Time zone in date range aggregations
  • Keyed Response
  • Filter Aggregation(필터 집합)
  • Filters Aggregation(다중 필터 집합)
  • Anonymous filters(익명 필터)
  • Other Bucket(기타 그룹)
  • Global Aggregation(총체적 집합)
  • Missing Aggregation(공수 집합)
  • Date Range Aggregation(시간 범위 집합)


    Date Range Aggregation은 시간 유형 데이터에 특화된 범위 집합입니다.그것과rangeaggregation은 주로 fromto의 값을 날짜 표현식으로 사용할 수도 있고, 귀환체의 fromto의 형식을 지정할 수도 있다.집합의 각 범위에는 from이 포함되지만 to은 제외됩니다. 예를 들어
    POST /sales/_search?size=0
    {
        "aggs": {
            "range": {
                "date_range": {
                    "field": "date",
                    "format": "MM-yyy",
                    "ranges": [
                        { "to": "now-10M/M" }, 
                        { "from": "now-10M/M" } 
                    ]
                }
            }
        }
    }
    

    설명: 이제 10개월을 빼고 월의 시작 시간으로 넘어갑니다.
    위의 예에서 우리는 두 개의 범위 그룹을 만들었다. 첫 번째는 10개월 전의 모든 문서를 포함하고, 두 번째는 10개월 전의 모든 문서를 포함한다.
    응답은 다음과 같습니다.
    {
        ...
        "aggregations": {
            "range": {
                "buckets": [
                    {
                        "to": 1.4436576E12,
                        "to_as_string": "10-2015",
                        "doc_count": 7,
                        "key": "*-10-2015"
                    },
                    {
                        "from": 1.4436576E12,
                        "from_as_string": "10-2015",
                        "doc_count": 0,
                        "key": "10-2015-*"
                    }
                ]
            }
        }
    }
    

    Missing Values


    missing 매개 변수는 값이 없는 문서를 어떻게 처리해야 하는지를 정의하는 데 사용됩니다.기본적으로, 그것들은 무시될 수도 있고, 당연히 값이 있는 것으로 처리할 수도 있다. 우리는 맵에서 필드의 부족한 값을 먼저 표시해야 한다.
    POST /sales/_search?size=0
    {
      "aggs": {
          "range": {
              "date_range": {
                  "field": "date",
                  "missing": "1976/11/30",
                  "ranges": [
                     {
                       "key": "Older",
                       "to": "2016/02/01"
                     }, 
                     {
                       "key": "Newer",
                       "from": "2016/02/01",
                       "to" : "now/d"
                     }
                 ]
             }
         }
      }
    }
    

    문서의 date 필드 값이 비어 있으면 "1899-12-31" 기본값이 있고 "Older" 그룹으로 구분됩니다.

    Date Format/Pattern


    정보는 JodaDate에서 제공됩니다.
    모든 ASCII 문자는 다음과 같이 정의된 형식 표현식 문자로 유지됩니다.
    Symbol
    Meaning
    Presentation
    Examples
    G
    era
    text
    AD
    C
    century of era (>=0)
    number
    이십
    Y
    year of era (>=0)
    year
    1996
    x
    weekyear
    year
    1996
    w
    week of weekyear
    number
    27
    e
    day of week
    number

    E
    day of week
    text
    Tuesday; Tue
    y
    year
    year
    1996
    D
    day of year
    number
    189
    M
    month of year
    month
    July; Jul; 07
    d
    day of month
    number

    a
    halfday of day
    text
    PM
    K
    hour of halfday (0~11)
    number
    0
    h
    clockhour of halfday (1~12)
    number
    십이
    H
    hour of day (0~23)
    number
    0
    k
    clockhour of day (1~24)
    number
    24
    m
    minute of hour
    number
    삼십
    s
    second of minute
    number
    55
    S
    fraction of second
    number
    978
    z
    time zone
    text
    Pacific Standard Time; PST
    Z
    time zone offset/id
    zone
    -0800; -08:00; America/Los_Angeles

    escape for text
    delimiter
    ‘’
    표현식 자모의 수량이 형식을 결정한다.
    XX
    설명
    Text
    표현식 자모의 수가 4 이상이면 완전한 형식을 사용한다.그렇지 않으면 사용할 수 있으면 짧거나 줄임말을 사용할 수 있습니다.
    Number
    숫자의 최소 표시.
    Year
    연도와 돌 필드의 숫자는 전문적으로 처리된다는 것을 나타낸다.예를 들어, Y의 수가 2인 경우 년은 두 자릿수인 금세기의 제로 베이스 년으로 표시됩니다.
    Month
    3개 이상은text를 사용하고 그렇지 않으면number를 사용합니다.
    Zone
    Z 출력은 콜론 오프셋이 없습니다. ZZ는 콜론, ZZZ 또는 더 많은 출력으로 zone id를 출력합니다.
    Zone names
    시간대 이름을 확인할 수 없습니다(Z).
    표현식의 모든 문자는 [A.Z] 및 [A.Z]의 범위에 있지 않으며 참조 텍스트로 간주됩니다.예를 들어,,,,,#and ? 따옴표에 포함되지 않더라도 생성된 시간 텍스트에 나타납니다.

    Time zone in date range aggregations

    time_zone 매개 변수는 날짜의 시간대를 UTC로 변환할 수 있습니다
    시간대는 ISO 8601 UTC 오프셋 (예: +01:00 또는 -08:00) 으로 지정하거나 TZ 데이터베이스에서http://www.joda.or g/joda-time/time zones.html[Zone id] 중 하나입니다.time_zone 매개 변수는 날짜 표현식에도 적용될 수 있다.예를 들어 CET 시간대에서 하루의 순환을 시작하면 다음과 같은 일을 할 수 있다.
    POST /sales/_search?size=0
    {
       "aggs": {
           "range": {
               "date_range": {
                   "field": "date",
                   "time_zone": "CET",
                   "ranges": [
                      { "to": "2016/02/01" }, 
                      { "from": "2016/02/01", "to" : "now/d" },
                      { "from": "now/d" }
                  ]
              }
          }
       }
    }
    

    날짜는 2016-02-15T00:00:00:00+01:00으로 변경됩니다.now/d은 CET 시간대 하루의 시작으로 반올림되었다.

    Keyed Response

    keyedtrue으로 설정하면 각 그룹과 유일무이한 키를 연결시켜서array가 아닌hash로 되돌려줍니다.
    POST /sales/_search?size=0
    {
        "aggs": {
            "range": {
                "date_range": {
                    "field": "date",
                    "format": "MM-yyy",
                    "ranges": [
                        { "to": "now-10M/M" },
                        { "from": "now-10M/M" }
                    ],
                    "keyed": true
                }
            }
        }
    }
    

    응답은 다음과 같습니다.
    {
        ...
        "aggregations": {
            "range": {
                "buckets": {
                    "*-10-2015": {
                        "to": 1.4436576E12,
                        "to_as_string": "10-2015",
                        "doc_count": 7
                    },
                    "10-2015-*": {
                        "from": 1.4436576E12,
                        "from_as_string": "10-2015",
                        "doc_count": 0
                    }
                }
            }
        }
    }
    

    각 범위에 대한 사용자 정의 키도 지원됩니다.
    POST /sales/_search?size=0
    {
        "aggs": {
            "range": {
                "date_range": {
                    "field": "date",
                    "format": "MM-yyy",
                    "ranges": [
                        { "from": "01-2015",  "to": "03-2015", "key": "quarter_01" },
                        { "from": "03-2015", "to": "06-2015", "key": "quarter_02" }
                    ],
                    "keyed": true
                }
            }
        }
    }
    

    응답은 다음과 같습니다.
    {
        ...
        "aggregations": {
            "range": {
                "buckets": {
                    "quarter_01": {
                        "from": 1.4200704E12,
                        "from_as_string": "01-2015",
                        "to": 1.425168E12,
                        "to_as_string": "03-2015",
                        "doc_count": 5
                    },
                    "quarter_02": {
                        "from": 1.425168E12,
                        "from_as_string": "03-2015",
                        "to": 1.4331168E12,
                        "to_as_string": "06-2015",
                        "doc_count": 2
                    }
                }
            }
        }
    }
    

    Filter Aggregation(필터링 집합)


    Filter Aggregation은 현재 인덱스에서 일치하는 모든 문서를 필터링하는 단일 그룹 집합입니다.일반적으로 현재 집합에서 구체적인 문서 집합을 얻는 데 사용된다.
    예:
    POST /sales/_search?size=0
    {
        "aggs" : {
            "t_shirts" : {
                "filter" : { "term": { "type": "t-shirt" } },
                "aggs" : {
                    "avg_price" : { "avg" : { "field" : "price" } }
                }
            }
        }
    }
    

    위의 예에서 우리는 t-shirt 제품의 평균 가격을 계산했다.응답은 다음과 같습니다.
    {
        ...
        "aggregations" : {
            "t_shirts" : {
                "doc_count" : 3,
                "avg_price" : { "value" : 128.33333333333334 }
            }
        }
    }
    

    Filters Aggregation(다중 필터링 집합)


    Filters Aggregation은 여러 그룹의 집합으로 그룹마다 필터 조건을 연결하고 자신의 필터 조건을 충족시키는 모든 문서를 수집합니다.
    예:
    PUT /logs/_doc/_bulk?refresh
    { "index" : { "_id" : 1 } }
    { "body" : "warning: page could not be rendered" }
    { "index" : { "_id" : 2 } }
    { "body" : "authentication error" }
    { "index" : { "_id" : 3 } }
    { "body" : "warning: connection timed out" }
    
    GET logs/_search
    {
      "size": 0,
      "aggs" : {
        "messages" : {
          "filters" : {
            "filters" : {
              "errors" :   { "match" : { "body" : "error"   }},
              "warnings" : { "match" : { "body" : "warning" }}
            }
          }
        }
      }
    }
    

    위의 사례에서 우리는 로그 정보를 분석한다. 집합은 로그 데이터에 대한 그룹 2개를 만들 것이다. 하나는 오류 정보를 포함하고 하나는 경고 정보를 포함한다.응답은 다음과 같습니다.
    {
      "took": 9,
      "timed_out": false,
      "_shards": ...,
      "hits": ...,
      "aggregations": {
        "messages": {
          "buckets": {
            "errors": {
              "doc_count": 1
            },
            "warnings": {
              "doc_count": 2
            }
          }
        }
      }
    }
    

    Anonymous filters(익명 필터링)

    filters 필드는 다음과 같은 필터링 그룹으로 사용할 수 있습니다.
    GET logs/_search
    {
      "size": 0,
      "aggs" : {
        "messages" : {
          "filters" : {
            "filters" : [
              { "match" : { "body" : "error"   }},
              { "match" : { "body" : "warning" }}
            ]
          }
        }
      }
    }
    

    필터 그룹이 되돌아오는 그룹과 요청이 일치합니다.응답은 다음과 같습니다.
    {
      "took": 4,
      "timed_out": false,
      "_shards": ...,
      "hits": ...,
      "aggregations": {
        "messages": {
          "buckets": [
            {
              "doc_count": 1
            },
            {
              "doc_count": 2
            }
          ]
        }
      }
    }
    

    Other Bucket(기타 그룹)


    other_bucket 속성은 응답에 그룹을 추가하고 일치하지 않는 모든 문서를 수집할 수 있습니다.
    값을 받다
    설명
    false
    다른 조별 조종을 하지 않다
    true
    다른 그룹을 되돌려줍니다. 만약 이름 필터 집합이 있다면, 기본적으로 이 그룹은 _other_으로 명명되고, 익명 집합이라면 다음 그룹으로 되돌아옵니다.
    other_bucket_키 매개 변수는 기본 _other_이 아닌 다른 그룹의 이름을 지정할 수 있습니다.이 속성을 설정하려면 _bucket 매개 변수를 true으로 설정해야 합니다.
    다음은 other_messages이라는 다른 그룹의 사례입니다.
    PUT logs/_doc/4?refresh
    {
      "body": "info: user Bob logged out"
    }
    
    GET logs/_search
    {
      "size": 0,
      "aggs" : {
        "messages" : {
          "filters" : {
            "other_bucket_key": "other_messages",
            "filters" : {
              "errors" :   { "match" : { "body" : "error"   }},
              "warnings" : { "match" : { "body" : "warning" }}
            }
          }
        }
      }
    }
    

    응답은 다음과 같습니다.
    {
      "took": 3,
      "timed_out": false,
      "_shards": ...,
      "hits": ...,
      "aggregations": {
        "messages": {
          "buckets": {
            "errors": {
              "doc_count": 1
            },
            "warnings": {
              "doc_count": 2
            },
            "other_messages": {
              "doc_count": 1
            }
          }
        }
      }
    }
    

    Global Aggregation(총 집합)


    Global Aggregation은 검색 조건을 무시하고 모든 문서를 포함하는 단일 그룹 집합입니다.집합된 상하문은 검색된 색인 제한만 받고 검색 조건에 제한을 받지 않습니다.
    주의: Global aggregators는 최고급 집합으로만 사용할 수 있으며, Global Aggregation을 다른 그룹에 잠입시키는 것은 무의미하다.
    예:
    POST /sales/_search?size=0
    {
        "query" : {
            "match" : { "type" : "t-shirt" }
        },
        "aggs" : {
            "all_products" : {
                "global" : {},  #global aggregation 
                "aggs" : { # global aggregation 
                    "avg_price" : { "avg" : { "field" : "price" } }
                }
            },
            "t_shirts": { "avg" : { "field" : "price" } }
        }
    }
    

    위의 사례는 조회 조건을 무시하고 모든 문서에 대해 집합 작업을 수행하는 방법을 보여 준다(예를 들어 avg_price). 우리의 사례에서 우리는 t_shirts이 아니라 모든 제품의 평균 가격을 계산한다
    결과는 다음과 같다.
    {
        ...
        "aggregations" : {
            "all_products" : {
                "doc_count" : 7, 
                "avg_price" : {
                    "value" : 140.71428571428572 
                }
            },
            "t_shirts": {
                "value" : 128.33333333333334 
            }
        }
    }
    

    Missing Aggregation(비어 있는 값 집합)


    Missing Aggregation은 문서가 모든 확실한 필드 값이나 필드 값을 null으로 설정한 문서에 대해 그룹을 만드는 단일 그룹 집합입니다.이 집합은 일반적으로 다른 필드 데이터 그룹 집합과 함께 사용됩니다. 예를 들어 범위 집합은 필드 값이 부족하여 그룹에 넣을 수 없는 문서 집합을 되돌려줍니다.
    예:
    POST /sales/_search?size=0
    {
        "aggs" : {
            "products_without_a_price" : {
                "missing" : { "field" : "price" }
            }
        }
    }
    

    위의 사례에서 우리는 가격이 없는 모든 제품의 응답을 다음과 같이 얻을 수 있다.
    {
        ...
        "aggregations" : {
            "products_without_a_price" : {
                "doc_count" : 00
            }
        }
    }
    

    좋은 웹페이지 즐겨찾기