Redisearch 집계

Redisearch 집계 (Aggregations)

Redisearch의 FT.AGGREGATE는 검색 결과에 대해 그룹화와 통계 계산을 수행하는 기능이에요. SQL의 GROUP BY처럼 특정 필드 값으로 묶고, 합계·평균·개수 같은 집계를 더할 수 있어요. 대시보드나 분석 화면을 만들 때 유용해요.

출처: https://redis.io/docs/latest/develop/data-types/search/aggregations/

기본 집계 구조

FT.AGGREGATE에 인덱스명, 쿼리, 그리고 파이프라인 형태의 집계 단계를 이어 붙여요. 예를 들어 책을 장르별로 묶어 개수를 세려면 이렇게 해요.

FT.AGGREGATE idx:books "*" \
  GROUPBY 1 @genre \
  REDUCE COUNT 0 AS num_books

GROUPBY로 묶을 필드를, REDUCE로 집계 함수와 결과 별칭(AS)을 지정해요.

집계 함수

대표적인 집계 함수는 다음과 같아요.

  • COUNT – 개수
  • SUM – 합계
  • AVG – 평균
  • MIN / MAX – 최솟값 / 최댓값
  • STDDEV – 표준편차
  • QUANTILE – 백분위수

숫자 필드의 합계를 구하려면 이렇게 해요.

FT.AGGREGATE idx:books "@genre:{fantasy}" \
  GROUPBY 0 \
  REDUCE SUM 1 @price AS total_price

여기서 GROUPBY 0은 아무 필드로도 묶지 않고 전체를 하나로 처리할 때 쓰는 표기예요.

정렬과 페이지네이션

SORTBY로 결과를 정렬하고, LIMIT로 개수를 제한해요.

FT.AGGREGATE idx:books "*" \
  GROUPBY 1 @genre \
  REDUCE COUNT 0 AS num_books \
  SORTBY 2 @num_books DESC \
  LIMIT 0 10

더 알아보기