Redisearch 인덱스 만들기
Redisearch 인덱스 만들기
Redisearch에서 검색을 하려면 먼저 인덱스를 만들어야 해요. FT.CREATE 명령어로 인덱스 이름과 필드 정의를 지정합니다. 인덱스는 해시(Hash)나 JSON 데이터 위에 만들 수 있어요.
출처: https://redis.io/docs/latest/develop/data-types/search/indexing/
FT.CREATE로 인덱스 만들기
기본 인덱스 생성 예시예요. ON HASH는 해시 데이터를 대상으로 하고, PREFIX 1 idx:는 키 이름이 idx:로 시작하는 해시를 인덱싱한다는 뜻이에요.
FT.CREATE idx:books ON HASH PREFIX 1 "book:" SCHEMA \
title TEXT \
author TEXT \
price NUMERIC \
year NUMERIC
SCHEMA 다음에 필드와 타입을 나열해요. TEXT는 풀텍스트 검색용, NUMERIC은 숫자 범위 필터용, TAG는 정확 매치(태그)용이에요.
JSON 데이터 인덱스
JSON 데이터를 대상으로 하려면 ON JSON을 쓰고 JSON 경로를 지정해요.
FT.CREATE idx:movies ON JSON PREFIX 1 "movie:" SCHEMA \
$.title AS title TEXT \
$.year AS year NUMERIC
AS로 JSON 경로에 별칭을 붙여 쿼리에서 사용할 필드명을 정할 수 있어요.
벡터 필드 인덱스
벡터 검색을 하려면 벡터 필드를 VECTOR 타입으로 선언하고, 알고리즘(FLAT 또는 HNSW)과 차원, 거리 메트릭을 지정해요.
FT.CREATE idx:embeddings ON HASH PREFIX 1 "emb:" SCHEMA \
embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINE
여기서 6은 벡터 옵션의 개수고, 이어서 TYPE FLOAT32, DIM 384, DISTANCE_METRIC COSINE을 지정했어요.
인덱스 확인과 삭제
FT._LIST로 인덱스 목록을, FT.INFO로 인덱스 상세를 볼 수 있어요. FT.DROPINDEX로 인덱스를 삭제할 수 있어요. FT.DROPINDEX idx:books 처럼 쓰면 되고, 데이터까지 함께 지우려면 DD 옵션을 붙여요.