필요성
- 다양한 해시로 이루어진 컬렉션에 대해 쿼리 작업을 구현하는 것은 어려운 작업이다.
- 다양한 기준을 이용하여 쿼리를 할 수 있다.
FT.CREATE idx:<name> ON <object> PREFIX <num> <prefix> SCHEMA <fieldKey> <type> [SORTABLE]
- 인덱스를 생성하는 명령어이다.
- 여기서 인덱스는 검색에 사용할 모든 키를 가리키는 일종의 데이터 유형을 말한다.
- 이 때 검색할 레코드(키)를 지정해야 하는데, 이는 접두어를 통해 이뤄진다. 만약 레코드를 items#으로 지정하면 이 접두어를 가진 모든 키를 찾고, 검색을 준비한다.
- <object>는 검색할 데이터 형식을 말한다. HASH, JSON만 가능하다.
- <num>에는 인덱스를 만들 때 적용할 레코드의 개수를 말한다. 따라서 <prefix>에는 <num>에 따른 여러 개의 접두어를 쓸 수 있다.
- schema 뒤에는 검색시에 조건에 사용할 필드키를 적는다. 이 때 <type>까지 함께 적어준다. <type>의 종류는 아래와 같다.
- [SORTABLE]은 이 필드에 대해 정렬 가능하도록 설정할 것인지에 대한 옵션값이다.
- ex) FT.CREATE idx:item ON HASH PREFIX 1 item: schema field1 TEXT
type 종류
- numeric : 숫자 관련 타입
- tag : 문자열 관련 타입
- query, 즉 정확한 값을 찾고자 할 때 사용한다.
- 예를 들어 라디오 버튼으로 정해진 입력값을 받을 때 사용.
- text : 문자열 관련 타입
- search, 즉 정확한 값 + 근삿값까지 찾고자할 때 사용한다.
- 사용자가 직접 입력한 값을 받을 때 사용한다. 오탈자와 같은 상황을 대비.
FT.DROPINDEX idx:<name> : 생성된 인덱스를 삭제하는 명령어이다.
FT.SEARCH idx:<name> '<query>' [sortby fieldKey direction]
- idx:<name>이 가리키는 인덱스에서 <query>에 해당하는 데이터를 검색해주는 명령어이다.
- 이 때 <query>는 꼭 따움표로 감쏴주자.
- <query>의 형식은 @<fieldKey>:<value>와 같다. <fieldKey>는 인덱스를 생성할 때 schema로 설정한 것만 적어야 한다.
- <value>의 형식은 text면 (), tag면 {}, numeric이면 []으로 감쏴줘야 한다.
- <query>에 여러 필드를 적으면 이는 and 연산으로 이해한다. or 연산을 위한다면 필드 사이에 |를 넣으면 된다.
- [] 안에 들어있는 것은 정렬할 때 사용하는 옵션으로, 정렬에 사용할 필드는 최대 1개만 된다.
- ex) FT.SEARCH idx:item '@field1:(value1)'
numeric 쿼리
- [num1 num2] : num1과 num2를 포함한 수 사이에 있는 데이터들을 모두 구한다.
- [num1 +inf], [-inf num1] : num1을 포함한 그 이후, 이전에 데이터를 모두 구한다.
- -@year:[num1 num2] : num1과 num2를 포함한 이 두 사이에 값을 제외한 데이터를 모두 찾는다.
tag 쿼리
- -@color:{color1} : color1를 제외한 모든 데이터를 구한다.
- {color1 | color2} : color1과 color2 둘 중 하나의 값을 포함한 모든 데이터를 구한다.
text 쿼리
- (text1 text2) : text1 and text2와 같이 and 연산으로 처리한다. 즉 값 중에 fast와 car가 들어간 값을 찾는다.
- (text1 | text2) : or 연산으로 text1이나 text2가 들어간 값을 찾는다.
- -@name:(text1) : text1를 제외한 모든 값
tag, text 공통적 문자열 처리 방법
- 스테밍 기법을 사용하면서 단어를 더 흔한 형태로 축약한다.
- 예를 들어 fastly를 fast로 변형시켜서 처리한다.
text 문자열 처리 방법
- text에서 검색할 값을 %로 감쏴면 오탈자를 봐준다.
- 이 때 봐주는 개수는 감쏴는 %의 개수이다.
- 예를 들어 @name:(%%text1%%)이면 2개의 오탈자까지 봐준다.
- 또한 *을 붙임으로써 접두어 검색을 할 수 있다.
- 예를 들어 fa*와 같이 검색하면 fast, fastiver 등등 fa로 시작하느 모든 데이터를 찾아준다.
- 주의할 점으로는 접두어에는 최소 2개의 문자가 있어야 한다.
가중치 설정
- RediSearch는 TF-IDF 알고리즘을 사용한다.
- TF-IDF 알고리즘을 사용하면 알고리즘을 통해 계산된 값을 통해 가장 큰 값을 제일 앞 순서로 반환해준다.
- 이 때 가중치를 설정하여 계산된 값을 조절할 수 있다.
- @name(chair)=>{$weight:5.0} @description:(chair)와 같이 설정할 수 있다. weight의 디폴트 값은 1이다.
'Database > Redis' 카테고리의 다른 글
RedisStack (0) | 2024.11.06 |
---|---|
메모리 정책 in redis (0) | 2024.11.05 |
Lua Script in redis (0) | 2024.11.05 |
Lock으로 동시성 관리하기 (with. redis) (0) | 2024.10.17 |
List 타입 명령어 (0) | 2024.10.09 |