elasticsearch(7) 집합 통계 - 그룹 집합

7556 단어 elasticsearch

직사각형 집합

GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_histogram": {
      "histogram": {
        "field": "field1",
        "interval": 5
      }
    }
  }
}

반환값은 [15,20)구간 내의 값이 1개,[20,25)구간 내의 값이 0개,[25,30)구간 내의 값이 1개,[30,35)구간 내의 값이 1개라는 것을 나타낸다.
{
  "aggregations": {
    "test_histogram": {
      "buckets": [
        {
          "key": 15,
          "doc_count": 1
        },
        {
          "key": 20,
          "doc_count": 0
        },
        {
          "key": 25,
          "doc_count": 1
        },
        {
          "key": 30,
          "doc_count": 1
        }
      ]
    }
  }
}

1. 직사각형 필터링 규칙


예를 들어price 필드가 있는데 이 필드는 상품의 가격을 설명합니다. 지금은 5마다 통을 만들고 구간마다 몇 개의 문서(상품)가 있는지 통계하고 싶습니다.
만약 한 상품의 가격이 32라면, 그것은 30의 통에 넣을 것이다. 계산의 공식은 다음과 같다.
rem = value % interval
if (rem < 0) {
      
    rem += interval
}
bucket_key = value - rem

위의 방법을 통해 문서가 어느 통에 속하는지 확정할 수 있다.
그러나 일부 문제점도 존재한다. 위의 방법은 정형 데이터에 대한 것이기 때문에 필드가 부동점수라면 먼저 정형으로 전환한 다음에 위의 방법으로 계산해야 한다.문제가 생겼습니다. 정수는 괜찮습니다. 만약 이 값이 음수라면 계산 오류가 발생할 것입니다.예를 들어 한 필드의 값은 -4.5이고 정형을 변환할 때 -4로 변환된다.그러면 위의 계산에 따라 -4의 통에 넣지만, 사실 -4.5는 -6의 통에 넣어야 한다.

2、extended_bounds

extended_bounds 직사각형 집합을 강제로 지정한 최소값부터 그룹을 만들 수 있습니다. 문서가 존재하지 않더라도 최대값이 될 때까지 그룹을 만들 수 있습니다.
또한 extended_bounds 그룹을 필터링하지 않습니다. 실제 그룹이 extended_bounds의 최소값 최대값 구간에 없더라도 직사각형 집합은 실제 최소값 또는 최대값으로 그룹을 만듭니다.
GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_histogram": {
      "histogram": {
        "field": "field1",
        "interval": 5,
        "extended_bounds":{
          "min": 0,
          "max": 20
        }
      }
    }
  }
}

3, 정렬


직사각형으로 그룹화된 키 정렬:
GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_histogram": {
      "histogram": {
        "field": "field1",
        "interval": 5,
        "order": {
          "_key": "asc"
        }
      }
    }
  }
}

직사각형으로 그룹화된 value 정렬:
GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_histogram": {
      "histogram": {
        "field": "field1",
        "interval": 5,
        "order": {
          "_count": "desc"
        }
      }
    }
  }
}

4, 오프셋


그룹은 기본적으로 0부터 interval 간격으로 진행되며 offset 그룹의 시작 위치를 수정할 수 있습니다.
GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_histogram": {
      "histogram": {
        "field": "field1",
        "interval": 5,
        "offset": 8
      }
    }
  }
}

날짜 직사각형 집합

GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_date_histogram": {
      "date_histogram": {
        "field": "field1",
        "interval": "1M",
        "format": "yyyy-MM-dd"
      }
    }
  }
}
interval 지원하는 표현식은 year,month,week,day,hour,quarter,minute,second입니다.

날짜 범위 집합

GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_date_range": {
      "date_range": {
        "field": "field1",
        "format": "yyyy-MM-dd", 
        "ranges": [
          {
            "from": "now-10M/M",
            "to": "now"
          }
        ]
      }
    }
  }
}


범위 집합

GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_range": {
      "range": {
        "field": "field1",
        "ranges": [
          {
            "from": 0,
            "to": 10
          }
        ]
      }
    }
  }
}

필터 집합

GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_filter": {
      "aggs": {
        "test_histogram": {
          "histogram": {
            "field": "field1",
            "interval": 10
          }
        }
      },
      "filter": {
        "range": {
          "field2": {
            "gte": 10
          }
        }
      }
    }
  }
}

다중 필터 집합


대량 필터 집합과 같다.
GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_filters": {
      "aggs": {
        "test_histogram": {
          "histogram": {
            "field": "field1",
            "interval": 10
          }
        }
      },
      "filters": {
        "filters": {
          "test_range": {
            "range": {
              "field2": {
                "gte": 10
              }
            }
          },
          "test_range2" :{
            "range": {
              "field2": {
                "lte": 20
              }
            }
          }
        }
      }
    }
  }
}

빈 값 집합

GET /testindex/testtype/_search
{
  "size": 0, 
  "aggs": {
    "test_missing": {
      "missing": {
        "field": "field1"
      }
    }
  }
}

색인 단어 집합


필드의 값 통계를 작성하여 집합합니다.
GET /index/type/_search
{
  "size": 0, 
  "aggs": {
    "test_terms": {
      "terms": {
        "field": "field1"
      }
    }
  }
}

1. 규모

size 매개 변수를 통해 되돌아오는 그룹 수량을 지정하고 size 0으로 설정하면 규모 Integer.MAX_VALUE 가 됩니다.

2, 정렬

order 그룹 정렬 방식을 사용자 정의하여 기본적으로 그룹 doc_count 값에 따라 정렬합니다.
GET /testindex/testtype/_search
{
  "size": 0, 
  "aggs": {
    "test_terms": {
      "terms": {
        "field": "field1",
        "size": 10,
        "order": {
          "_count": "desc"
        }
      }
    }
  }
}

3. 필터링

GET /testindex/testtype/_search
{
  "size": 0, 
  "aggs": {
    "test_terms": {
      "terms": {
        "field": "field1",
        "size": 10,
        "include": "*",
        "exclude": "water.*"
      }
    }
  }
}

좋은 웹페이지 즐겨찾기