필요성

  • 다양한 해시로 이루어진 컬렉션에 대해 쿼리 작업을 구현하는 것은 어려운 작업이다.
  • 다양한 기준을 이용하여 쿼리를 할 수 있다.

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

+ Recent posts