Redisearch 검색하기
Redisearch 검색하기
인덱스를 만들었으면 FT.SEARCH 명령어로 데이터를 검색할 수 있어요. Redisearch는 풀텍스트 검색, 정확 매치(태그) 검색, 숫자·지리 필터, 벡터 검색을 하나의 쿼리로 조합할 수 있는 게 특징이에요.
출처: https://redis.io/docs/latest/develop/data-types/search/query/
기본 검색
FT.SEARCH에 인덱스 이름과 쿼리를 넘겨요. 쿼리 문법은 @필드:값 형태를 써요.
FT.SEARCH idx:books "@title:magic"
모든 필드를 대상으로 하려면 필드 지정 없이 단어만 쓰면 돼요. *는 모든 문서를 의미해요.
필터와 정렬
숫자 범위 필터는 @price:[100 500]처럼 대괄호로 범위를 지정하고, 태그 정확 매치는 @genre:{fantasy}처럼 중괄호를 써요. 정렬은 SORTBY로 지정해요.
FT.SEARCH idx:books "@title:magic @price:[100 500]" SORTBY price DESC
페이지네이션
LIMIT로 결과의 시작 위치와 개수를 제어해요. 기본은 첫 10건이에요.
FT.SEARCH idx:books "*" LIMIT 0 20
벡터 검색
벡터 필드를 KNN 검색하려면 쿼리에 *=>[KNN 5 @embedding $BLOB] 형태를 쓰고, $BLOB 파라미터로 쿼리 벡터를 넘겨요. KNN 5는 가장 가까운 5개를 찾는다는 뜻이에요.
FT.SEARCH idx:embeddings "*=>[KNN 5 @embedding $BLOB]" PARAMS 2 BLOB "\x12\x34..." DIALECT 3
Redisearch 쿼리 최신 다이얼렉트(문법 버전)를 쓰려면 DIALECT 3을 명시하는 것도 방법이에요.