๐ฅ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค/Redis
[Redis] ch.19 RediSearch๋ก ๋ฐ์ดํฐ ์ฟผ๋ฆฌํ๊ธฐ
OR15A
2024. 1. 29. 15:09
์ ๋ฐ๋ฏธ Redis : ๊ฐ๋ฐ์๋ฅผ ์ํ Redis ์๋ฒฝ ๊ฐ์ด๋
ch.19 - RediSearch๋ก ๋ฐ์ดํฐ ์ฟผ๋ฆฌํ๊ธฐ
๋ชจ๋ ์๊ฐ
- ๋ชจ๋
- Redis์ ๋ก๋ฉํ ๋ณ๋์ ํ๋ก๊ทธ๋จ
- ๋ชจ๋์ ๋ก๋ฉํ ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ถ๊ฐํ๊ณ ๊ทธ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๋ช ๋ น๋ค์ ์ถ๊ฐํจ
- ์ฝ๊ณ ๊ฐ๋จํ๊ฒ Redis์ ๋ฅ๋ ฅ์ ํฅ์์ํฌ ์ ์์
- ์ด ๊ฐ์์์ ๋ค๋ฃฐ ๋ชจ๋ : RedisJSON, RediSearch ๋ชจ๋
RedisJSON
- Redis ์์์ JSON ์ฝ๊ฒ ์ ์ฅํ๊ณ ๋ค๋ฃฐ ์ ์์
- ์ง์ง JSON ๋ฐ์ดํฐ ์ ์ฅ ๊ฐ๋ฅํจ : ์ค์ฒฉ ๋ฐฐ์ด, ์ค์ฒฉ ๊ฐ์ฒด, ์ํ๋ ๊ฑฐ์ ๋ชจ๋ JSON ๊ตฌ์กฐ๋ฌผ ์ ์ฅ ๊ฐ๋ฅ
RediSearch
- Redis ๋ฐ์ดํฐ ์ ์ฅ์ ์ ์ฒด์ ๊ฑธ์ณ ์๋ฒฝํ ํ ์คํธ ๊ฒ์๊ณผ ๋ค์ํ ํค์ ๋ํ ์ฟผ๋ฆฌ ๋ฐ ํํฐ๋ง ๊ธฐ๋ฅ ์ ๊ณต
- ์๋ง์ ํด์๋ค์ ๋์์ ์ดํด๋ณด๊ณ , ํน์ ํํฐ๋ง ๊ธฐ์ค์ ์ด์ฏํ์ฌ ์์ฃผ ๊ตฌ์ฒด์ ์ธ ํด์๋ฅผ ์ฐพ์ ์ ์์
Redis ์ฝ์ด์ Redis Stack
- REDIS
- Redis ์ฝ์ด
- ์์ฃผ ๊ธฐ๋ณธ์ ์ธ Redis ๋ฒ์
- ์์ฃผ ๊ฐ๋จํ ๋ฐ์ดํฐ ์ ํ๋ค๋ง ํฌํจ๋์ด ์์
- Redis Stack
- ๊ธฐ๋ณธ์ ์ธ Redis ์ฌ๋ณธ๊ณผ ํจ๊ป ๊ทธ ์์ ๋ฏธ๋ฆฌ ๋ก๋ฉ๋ ๋ง์ ๋ชจ๋๋ค์ ํจ๊ป ๋ฐ๊ฒ ๋จ
- RediSearch, RedisJSON, ๊ทธ๋ฆฌ๊ณ RedisGraph๋ RedisTimeSeries, RedisBloom ๊ฐ์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ชจ๋ ํฌํจ๋จ
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ Redis Stack์ ์ ํธํจ(์ถ๊ฐ์ ์ธ ๋ง์ ์ค์ ์ ํ์ง ์์๋ ์ด ๋ชจ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์ด๋ฏธ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ)
ํ๋ก๋์ ํ๊ฒฝ์์ ๋ชจ๋ ์ฌ์ฉํ๊ธฐ
- ์์์ ๊ธ์ ์ ์ผ๋ก ๋งํ Redis Stack์ ๊ฐ์ ์ด๋ฐ์ ์ค์นํ์ง ์์ ์ด์
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๋ฐฉ์, ํน์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก๋ ํ๋ก๋์ ํ๊ฒฝ์์ Redis๋ฅผ ์คํํ๋ ๋ฐฉ์์ ๋ฐ๋ผ์๋ ๋ชจ๋์ ์ฌ์ฉํ์ง ๋ชปํ ์ ์๊ธฐ ๋๋ฌธ์
- ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ ๋ Redis์ ํ๋ก๋์
์ธ์คํด์ค์ ์ ์ํด์ผํจ -> ๋ฌธ์ ๋ ๊ทธ ์ธ์คํด์ค๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๋๋
[1] AWS๋ Google Cloud๊ฐ ์ฐ๋ฆฌ ๋์ ์ Redis์ ์ฌ๋ณธ์ ์คํํ๋๋ก ์์ฒญํ๊ธฐ
- ์ฅ์ : ๊ด๋ฆฌํ Redis์ฌ๋ณธ์ด๋ผ๊ณ ๋ถ๋ฆ, AWS๋ Google Cloud๋ ์ค์ , ๋ณด์ ์ ๋ฐ์ดํธ, ์ผ๋ฐ ์ ๋ฐ์ดํธ, ๋ฐฑ์ ๋ฑ์ Redis ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๋ชจ๋ ๊ฑธ ์ฒ๋ฆฌํด์ค
- ๋จ์ : Redis ๋ชจ๋์ ์ฌ์ฉํ ์ ์์
- ๋ง์ผ AWS๋ Google Cloud์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ค๋ฉด ์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ๋ค์ ๋ชจ๋ ์ดํดํ๋ ๊ฒ ์ค์ํจ
- ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ ๊ฒฝ์ฐ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฌผ์ ์์กดํด์ผํจ
[2] ์ง์ Redis๋ฅผ ์คํํ๊ธฐ, ์ฆ ์ง์ ๋ฒ์ถ์ผ ๋จธ์ ์ด๋ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ณ Redis๋ฅผ ์คํ
- ์ฅ์ : ๋ชจ๋์ ์ฌ์ฉํ ์ ์์(์์ ๋กญ๊ฒ RedisJSON์ด๋ RediSearch๋ฅผ ๋ก๋ฉ, ์ํ๋ ์ด๋ ๋ชจ๋์ด๋ ์ฌ์ฉํ ์ ์์)
- ๋จ์ : ๋ง์ ์ถ๊ฐ์ ์ธ ์ค์ ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ํด์ผ ํจ. ์ต์ด ์ค์ + ์ด ๋ชจ๋๋ค์ ์ค์นํ๊ณ ๋ณด์ ์
๋ฐ์ดํธ๋ฅผ ํ๊ณ ๋ฐฑ์
๋ฑ๋ ์ฒ๋ฆฌํดํจ.
- ๋ชจ๋ ์ธํ๋ผ๋ฅผ ์ค์ ํ๋ ๋ฐ๋ง ์ถ๊ฐ ๊ฐ๋ฐ ์๊ฐ์ด ๋ง์ด ๋ฆ.
[3] Redis๋ผ๋ ํ์ฌ์ ์์งํด์ ํ์ฌ๊ฐ ์ฐ๋ฆด ๋์ ํด์ Redis๋ฅผ ์คํํ๋๋ก ํ๊ธฐ
- ๋ชจ๋ ์ธํ๋ผ๋ฅผ ์ค์ ํ๋ ๋ฐ๋ง ์ถ๊ฐ ๊ฐ๋ฐ ์๊ฐ์ด ๋ง์ด ๋ฆ.
- ๊ฐ์ ์ด๋ฐ์ ์ฐ๋ฆฌ๋ redis.com์ผ๋ก ๊ฐ์ ๊ณ์ ์ ๋ฑ๋ก ๋ฐ ๋์๋ณด๋์์ ๋ฌด๋ฃ Redis ์ธ์คํด์ค๋ฅผ ์์ฑํจ
- ๋ฌด๋ฃ Redis ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๊ทธ ์ธ์คํด์ค๋ ์ค์ ๋ก AWS๋ Google Cloud ๋๋ Microsoft Azure์์ ์์ฑ๋์์
- ์ฆ ๊ทธ Redis ์ธ์คํด์ค๋ ์ฌ์ ํ ๊ทธ ํด๋ผ์ฐ๋ ์ ๊ณต์ฌ์์ ์คํ๋๋ ๊ฒ
- ์ด๊ฒ๋ค์ ๊ด๋ฆฌํ ์ธ์คํด์ค (์ฌ์ฉ์๊ฐ ๋ณด์์ ๋ฐ์ดํธ๋ ๋ฐฑ์ ๋ฑ์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์์)
- ์ ์ผํ ์ฐจ์ด์ : ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๊ด๋ฆฌํจ (AWS๋ Google Cloud๊ฐ ์ง์ ๊ด๋ฆฌํ๋ ๊ฒ ์๋๋ผ)
- ์ฅ์ : ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅ
- Redis ์ฌ๋ณธ์ ์คํํ๊ธฐ ์ํด redis.com์ ์ด์ฉํ๋ค๋ฉด ์ฌ์ ํ AWS๋ Google Cloud์์ ํธ์คํ ๋๋ฏ๋ก
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ์ธ๋ถ ํด๋ผ์ฐ๋ ์ ๊ณต์ฌ๋ฅผ ์ด์ฉํ ํ์ ์์ด ์ง์ ๊ทธ ํ์ฌ๋ค์ ์ฐ๊ฒฐ๋ ์ ์์
๋ชจ๋
๊ฒ์ ๊ฐ์
- RediSearch
- RediSearch๋ฅผ ์ด์ฉํ๋ฉด ๋ค์ํ ํด์๋ก ๊ตฌ์ฑ๋ ์ปฌ๋ ์ ์ ์์๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์
- RediSearch๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ 2๋จ๊ณ
- [1] ์ธ๋ฑ์ค ์์ฑ
- ์ธ๋ฑ์ค๋ ๊ฒ์ํ๋ ค๋ ๋ค์ํ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ง์ํ๋ ์ผ์ข ์ ๋ฐ์ดํฐ ์ ํ
- ๊ฒ์ํ๋ ค๋ ์ด๋ค ๋ ์ฝ๋ ๊ทธ๋ฃน์ ๋ํด ํ ๋ฒ๋ง ์ธ๋ฑ์ฑ์ ํ๋ฉด ๋จ
- ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
- ์ฒซ ๋ฒ์งธ๋ ์ฐ๋ฆฌ๊ฐ ๊ฒ์ํ ๋ ์ฝ๋๋ฅผ ์ง์
- ์ ๋์ด๋ฅผ ์ ๊ณตํด์ ๊ทธ๊ฒ์ ์ง์ ํ๊ธฐ = ์ด๋ค ๋ฌธ์์ด๋ก ์์๋๋ ๋ชจ๋ ํด์๋ฅผ ๊ฒ์ํ๋ค๋ ์๋ฏธ
- ex) 'items#a1' 'items#b2' : items#๋ผ๋ ํค๋ฅผ ๊ฐ์ง ๋ชจ๋ ํด์๋ฅผ ๊ฒ์ํ ์ ์์
- RediSearch๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋๋ง๋ค ์ ๋์ด๋ฅผ ์ ๊ณตํด์ ๊ทธ๊ฑธ ์ง์
- RediSearch๋ ๊ทธ ํด์, ์ด๋ฆ, ์์, ๊ฐ๊ฒฉ์ ๊ดํ ์์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ฒ ๋จ
- ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์๋ค๋ฉด -> ์ํ๋ ํ์๋งํผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์
- ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ํน์ ํ ์ด๋ฆ, ์์, ๊ฐ๊ฒฉ ๋ฑ์ ๊ฐ์ง ํญ๋ชฉ์ ๊ฒ์ ๊ฐ๋ฅ
- FT.CREATE
- [2] ์ธ๋ฑ์ค ์ฌ์ฉ
- FT.SEARCH
- [1] ์ธ๋ฑ์ค ์์ฑ
์ธ๋ฑ์ค
์ธ๋ฑ์ค ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ
- ์๋ก์ด ์ธ๋ฑ์ค ๋ง๋๋ ๋ช ๋ น์ด FT.CREATE
- ๋๋ฒ์งธ ์ค ์ถ๊ฐํ๊ธฐ ์ํด์๋ ๋ค์ฌ์ฐ๊ธฐํด์ผํจ(ํญ)
- ์ด๋ฆ์ด idx:cars ์ธ ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
idx:cars ON HASH PREFIX 1 cars# SCHEMA name TEXT year NUMERIC color TAG
- ์ธ๋ฑ์ค ์ฌ์ฉํด๋ณด๊ธฐ
- name์ด fast car์ธ ํด์ ์ฐพ๊ธฐ
FT.SEARCH idx:cars '@name: (fast car)'
- color์ด blue์ธ ์๋์ฐจ ์ฐพ๊ธฐ
FT.SEARCH idx:cars '@color:{blue}'
- year์ด 1955์ด๊ฑฐ๋ 1980์ธ ์๋์ฐจ ์ฐพ๊ธฐ
FT.SEARCH idx:cars '@year: [1955 1980]'
์ธ๋ฑ์ค ์์ธํ ์์๋ณด๊ธฐ
- name์ด fast car์ธ ํด์ ์ฐพ๊ธฐ
- ์ฟผ๋ฆฌ์ ๊ฒ์์ ์ฐจ์ด์
- ์ฟผ๋ฆฌ
- ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋๋ ๋ณดํต ์ธ์ ๋ ๊ธฐ์กด์ ์ ํํ ๊ธฐ์ค๊ณผ ์ผ์นํ๋ ๋ ์ฝ๋ ์ธํธ๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํจ
- ์ฟผ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ์ ํํ ๊ฒฐ๊ณผ ์ธํธ๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ
- ๊ฒ์
- ๊ฒ์์ ์ด์ฉํ์ฌ ๋ฐ๋ ๋ชจ๋ ๊ฒฐ๊ณผ๋ ๊ธฐ์ค์ ์ ํํ ๋ถํฉํ์ง ์์์๋ ์์ง๋ง, ์ฐพ์ผ๋ ค๋ ๊ฒ์ ์์ฃผ ๊ทผ์ ํ ์ถ์ธก ๊ฐ์ ๊ฒ
- ๊ฒ์์ ๊ฒฐํจ์ด ์์ ์ ์๋ ์ฌ์ฉ์ ์ ๋ ฅ์ด๋ ๊ฒฐํจ ์๋ ๋ฌธ์์ด์ ํด์ํ๊ณ , ๊ฐ๋ฅํ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ค๋ ๊ฒฝ์ฐ
- ex) ์๋ง์กด ์ผํ๋ชฐ ๊ฒ์ ์์
- ์ฟผ๋ฆฌ
- ์ฟผ๋ฆฌ์ ๊ฒ์์ ๊ฐ๋
๊ผญ ๊ตฌ๋ถํด์ ์ดํดํ๊ธฐ!
- RediSearch ๊ณต์ ๋ฌธ์์์๋ ๋์ ๋ชจํธํ๊ฒ ๋งํจ
- ์ฟผ๋ฆฌํ ์์ ์ ๋ํด ์ด์ผ๊ธฐ ํ๊ธฐ๋ ํ์ง๋ง, ๊ฒ์ํ ์์ ์ ๋ํด ์๊ธฐํ๋ ๋ถ๋ถ๋ ์์
- ๊ตฌ๋ถํ๊ณ ์์ผ๋ฉด ์ฝ๊ธฐ๊ฐ ์์ํจ
์ธ๋ฑ์ค ๋ช ๋ น์ด ๋ถํดํด์ ์ดํดํ๊ธฐ
idx:cars ON HASH PREFIX 1 cars# SCHEMA name TEXT year NUMERIC color TAG
idx:cars
- ๋ง๋ค๊ณ ์ ํ๋ ์ธ๋ฑ์ค ์ด๋ฆ
- idx + : + ์ฐพ๋๋์
- ์ธ๋ฑ์ค ์ญ์ ์
FT.DROPINDEX
์ฌ์ฉ
ON HASH
- ์ต์ ์ HASH or JSON๋ง ๊ฐ๋ฅํจ(JSON์RedisJSON ๋ชจ๋ ์ฌ์ฉ์)
PREFIX 1 cars#
- ๊ฒ์ํ๋ ค๋ ๋ ์ฝ๋์ ์ธ๋ฑ์ค๋ฅผ ์๋ ค์ฃผ๊ธฐ
- FT.CREATE๋ ๋ด๋ถ์ ์ผ๋ก
cars#
๋ผ๋ ๋ฌธ์์ด๋ก ์์ํ๋ ๋ชจ๋ ํค๋ฅผ ์ฐพ์ 1
์ ์ฐพ๊ธฐ์ํด ์ ๊ณตํ๋ ์ธ๋ฑ์ค์ ๊ฐ์- ๋ค๋ฅธ ์์
PREFIX 2 cars# trucks#
SCHEMA
- RediSerach๊ฐ ๊ฒ์ฌํ ๋ชจ๋ ๊ฐ๊ฐ์ ํด์์ ์์์ RediSearch๊ฐ ์ฐพ์๋ณด๊ธธ ์ํ๋ ๋ค์ํ ์์ฑ์ ์ค๋ช ํ๋๋ฐ ์ฌ์ฉํจ
name TEXT year NUMERIC color TAG
- SCHEMA ๋ฐ๋ก ๋ค์ ํ๋์ ์ด๋ฆ ๋์ดํ๊ณ ๊ทธ ์์ ์๋ ๊ฐ์ ํ์ ์ ๋์ดํจ
- ์ด๋ฆ, ํ์
+
์ด๋ฆ๋ฐ์ดํฐ, ํ์ ๋ฐ์ดํฐ
- ๋ง์ฝ color๋ถ๋ถ ๊ฒ์ ์๋ตํ๊ณ ์ถ๋ค๋ฉด ๋ช
์ ํ์ง ์์ผ๋ฉด ๋จ
์ธ๋ฑ์ค ํ๋ ํ์
name TEXT
,year NUMERIC
,color TAG
์์ TEXT, NUMERIC, TAG ๋ฑ
- NUMERIC
- ์ธ๋ฑ์ค์ ๋ํด ์ซ์๋ฅผ ์ด์ฉํ ์ฟผ๋ฆฌ๋ฅผ ํ๋ ค๊ณ ํ ๋ ํด์ ์์ ํ๋์ ์ซ์๋ฅผ ์ ์ฅํจ
- GEO
- ์ง๋ฆฌ์ ์ขํ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ํ๋๋ฅผ ํ์ํ ๋
- VECTOR
- ๋ ์ฝ๋๋ค ๊ฐ์ ์ ์ฌ์ฑ์ ์ฐพ์ ์ ์๊ฒ ํด์ฃผ๋ ๊ณ ๊ธ์ฟผ๋ฆฌ
- TAG
- ์ฟผ๋ฆฌ์ ์ฌ์ฉ
- ํด์ ์์ ๋ฌธ์์ด์ ์ฟผ๋ฆฌ ์ฉ์ด๋ก ์ฌ์ฉํ ๋
- TEXT
- ๊ฒ์์ ์ฌ์ฉ
- ํด์ ์์ ํ๋๋ฅผ ๊ฒ์์์
์ ์ฌ์ฉํ ๋
์ธ๋ฑ์ค ํ๋ TAG์ TEXT์ ์ฐจ์ด
- TAG
- ์ ํํ ๊ฐ์๊ฑฐ๋, ์ ํํ ๊ฐ์ง ์์ ๊ฒ์ ์ฐพ์ ๋
- ์ ๋ต์ด ์๋ ํ๋
- TEXT
- ๊ฒ์์์
- ์ฌ์ฉ์๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ
- ์ ํ ์ด๋ฆ์ด๋ ๋ฆฌ๋ทฐ ๋ฑ
- ์ ๋ต์ด ์๋ ํ๋
- ์์์น ๋ชปํ ๋ฌธ์์ด์ ์ ๋ ฅํ๋ ๋ถ๋ถ
SEARCH ๋ช ๋ น์ด
- ๋ช
๋ น์ด
FT.SEARCH
๊ด๋ จ ๊ณต์ ๋ฌธ์- redis.io/commands/ft.search
- ํ์ด์ง๋ฅผ ๋ด๋ฆฌ๋ค ๋ณด๋ฉด Parameters์น์ ์ ์ฟผ๋ฆฌ์ ๊ดํ ์น์ ์์
- ์ค๋ช ์ Query Syntax๋ฅผ ๊ฒ์ํ๋ฉด ๋ณ๋์ ํ์ด์ง ์ด๋์ด ๊ฐ๋ฅํจ
- https://redis.io/docs/interact/search-and-query/query/
- ์ฟผ๋ฆฌ ์์ฑ ์ ์ด๋ ค์์ด ์์ ๋ ์ด ๋ฌธ์๋ฅผ ์ฐพ์๋ณด๊ธฐ!
- ๊ฒ์์ ์์
@name:(fast car)
,@color:{blue}
,@year:[1955 1980]
- 1955๋ 1980๋ ์ ์์ฑ๋ ์๋์ฐจ์ด๋ฉด์ + ์๊น์ด blue์ธ ์๋์ฐจ ์ฐพ๊ธฐ znjfl
- FT.SEARCH idx:cars '@year:[1955 1980] @color:{blue}'
- ์ฟผ๋ฆฌ ์์ฑ์ ์ฃผ์์
- ์ฟผ๋ฆฌ๋ ํญ์ ๋ฐ์ดํ ์์ ์์ฑํด์ผํจ
- ์ค๋ น ๋ฌธ์์ ํน๋ณํ ํ์๋์ด ์์ง ์์๋ ํญ์ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํ ์์ ๋ฃ๊ธฐ
- ๋ฌธ์์ ์์์์๋ ์ฟผ๋ฆฌ์ ๋ฐ์ดํ ํ์๋ฅผ ์๋ตํ ๋ถ๋ถ๋ ์์ด์ ์กฐ์ฌํ๊ธฐ
- ์ฟผ๋ฆฌ ์์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ์๋ ๋ฐ๊นฅ์ชฝ ๋ฌธ์์ด์ ์ฌ์ฉํ์ง ์์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ๊ธฐ(์ฟผ๋ฆฌ ๋ฐ๊นฅ์ '', ์ฟผ๋ฆฌ ์์ชฝ์ "")
์ซ์ํ ์ฟผ๋ฆฌ
- @year:[1955 1980]
- 1955 <= year <= 1980
- @year:[(1955 (1980]
- 1955 < year < 1980
- @year:[1955 +inf]
- 1955 <= year
- @year:[-inf 1955 ]
- year <= 1955
- -@year:[1955 1980]
- year < 1955
- 1980 < year
ํ๊ทธ ์ฟผ๋ฆฌ
- @color:{blue}
- ์์์ด blue์ธ ๋ ์ฝ๋ ์ฐพ๊ธฐ
- @color:{blue}
- ์์์ด blue๊ฐ ์๋ ๋ ์ฝ๋ ์ฐพ๊ธฐ
- @color:{red|blue}
- red๊ฑฐ๋ blue์ธ ๋ชจ๋ ๋ ์ฝ๋
- @color:{light\blue}
- 'light blue'๋ผ๋ ๋ฌธ์์ด์ด ์์ ๋
- ์ฃผ์์
- ๋ถ์ฉ์ด๋ฅผ ํฌํจํ๋ฉด Redis๋ ์๋์ผ๋ก ํํฐ๋งํ์ฌ์ ์ ๊ฑฐํจ
- ex) @cities:{to | a | or} => Redis๋ @cities:{} ๋ก ์ธ์ํจ
- ํ ์คํธ ์ฟผ๋ฆฌ์์๋ ๋ง์ฐฌ๊ฐ์ง์
ํ ์คํธ ์ฟผ๋ฆฌ
- ์ ์ฒ๋ฆฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์นจ
- ํด์ํ๋์ ์๋ ํ ์คํธ ๋ฟ๋ง ์๋๋ผ ์ค์ ์ฟผ๋ฆฌ ํ ์คํธ๋ ์ฝ๊ฐ์ ์ ์ฒ๋ฆฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๊ฒ ๋จ
- ๋ชจ๋ ๋ค์ํ ๋ถ์ฉ์ด๋ค์ด ์ญ์ ๋จ ex)a, the
- ์คํ
๋ฐ (stemming)์ด๋ผ๋ ๊ธฐ๋ฒ์ ์ฟผ๋ฆฌ์ ์ ์ฉํจ
- ๊ฒ์์ ์ํด ์ด๋ค ์ด์ด๋ฅผ ์ฐ๋ ์ง ์ ๋์ด๋ ์ ๋ฏธ์ด๊ฐ ์์ ์ ์๋ ๋ณต์กํ ๋จ์ด์ ๊ฒฝ์ฐ์๋ ๊ทธ ๋จ์ด์ ๋ ํํ ํํ๋ก ์ถ์ฝ๋จ
- ์ดํด๋ฅผ ๋๋ ๋งํฌ snowballstem.org/demo.html
- ๊ฒ์์ด๋ฅผ ์ ์ฐํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ฒ
- ์ฌ์ฉ์๊ฐ ๋จ์ด ์์ ์ ๋์ด๋ฅผ ์ถ๊ฐํด๋ ๊ทธ ๋จ์ด์ ์ ๋์ด๊ฐ ์๋ ๋ ํํ ๋ฒ์ ์ ๋งค์นญํ๊ฒ ๋ ๊ฒ์
- fast
- @๋ฅผ ์ฐ์ง ์์ผ๋ฉด ํด๋น ๋ฌธ์์ด์ ์ด์ฉํด์ ํ์ ์ด TEXT๋ก ํ์๋ ๋ชจ๋ ํ๋์ ๊ฑธ์ณ ๊ฒ์ํจ
- @name:(fast car)
- fast AND car
- @name:(fast|car)
- fast OR car (+ fast AND car)
- -@name:(fast)
- fast๋ฅผ ํฌํจํ์ง ์์ ๊ฒ
ํผ์ง ๊ฒ์
- ํผ์ง ๋งค์นญ์๋ ํผ์ผํธ(%) ๊ธฐํธ๋ฅผ ์ฌ์ฉํจ
- ์์ผ๋ ์นด๋๊ฐ ์๋๊ณ , ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฒ๊ณผ ๊ทธ๋ค์ด ์ค์ ๋ก ๊ฒ์ํ๋ ค๋ ๊ฒ ๊ฐ์ด์ ๋ถ์ผ์นํ๋ ๋ฌธ์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ
- ex) car๋ฅผ ๊ฒ์ํ๋ ค๋ ์ฌ์ฉ์๊ฐ ์ค์๋ก dar๋ผ๊ณ ์ ๋ ฅํจ => ๋ฌธ์ 1๊ฐ๊ฐ ๋ถ์ผ์นํจ
- ๋ฌธ์ 1๊ฐ ๋ถ์ผ์น๋ ๊ฒ์
FT.SEARCH idx:cars '@name:(%dar%)'
FT.SEARCH idx:cars '@name:(%gast%)'
- ๋ฌธ์ 2๊ฐ ๋ถ์ผ์น๋ ๊ฒ์
FT.SEARCH idx:cars '@name:(%%dar%%)'
- ์์ชฝ์ ์ต๋ 3๊ฐ๊น์ง % ๊ธฐํธ๋ฅผ ๋ฃ์ ์ ์์
- ์คํ์ ํ๋ ๊ฐ๋ฅผ ๋ฃ์ด๋ ์ค๋งํธํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฒ
์ ๋์ด ๊ฒ์
- ์ ๋์ด ๊ฒ์์ ์ต์ํ ๋ฌธ์๊ฐ 2๊ฐ ์์ด์ผ ํจ
- ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ: f, a, b*
fa*
๋ผ๊ณ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ์ฟผ๋ฆฌ๊ฐ ํ์ฅ๋์ด fast, far, fact, fawn, fantastic ๋ฑ์ด ํฌํจ๋จ
๊ฒ์์ด ์ ์ฒ๋ฆฌ ๊ธฐ์ค
- ๊ฒ์ ์์
๋จ๊ณ
- [1] ์๋์์ฑ ์ต์
๋ฆฌ์คํธ๋ฅผ ํ์ํ๋ ๋จ๊ณ
- ์ ํ์ฌํญ
- fa๋ผ๊ณ ์ ๋ ฅํ๋ฉด far, fast ๋ฑ์ ์๋์์ฑ์ ํ์
- [2] ์ฌ์ฉ์๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ ์ถํ๋ ๋จ๊ณ
- ์ฌ์ฉ์๊ฐ fast ๋ผ๊ณ ์ ๋ ฅํ๋ฉด ํผ์ง๊ฒ์ ์ฌ์ฉ
- [1] ์๋์์ฑ ์ต์
๋ฆฌ์คํธ๋ฅผ ํ์ํ๋ ๋จ๊ณ
- ์ฌ์ฉ์์ ์คํ ์ฒ๋ฆฌ ex)
fast fasty fast car
- ๊ฒ์๋ก์ง์ ๋ง๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ๋ผ ์ต์ ์ด ๋ค๋ฅด๋ค (159๊ฐ. 04:00 ๋ค์ ํ์ธ)