๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/Redis

[Redis] ch.19 RediSearch๋กœ ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌํ•˜๊ธฐ

by OR15A 2024. 1. 29.

https://github.com/HongHyeongJu/StudySpace/blob/main/database/Redis/Redis_%ED%95%99%EC%8A%B5%EB%85%B8%ED%8A%B8_06.md

์œ ๋ฐ๋ฏธ 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] ์ธ๋ฑ์Šค ์ƒ์„ฑ
        • ์ธ๋ฑ์Šค๋Š” ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ๋‹ค์–‘ํ•œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ง€์‹œํ•˜๋Š” ์ผ์ข…์˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•
        • ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ์–ด๋–ค ๋ ˆ์ฝ”๋“œ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ๋งŒ ์ธ๋ฑ์‹ฑ์„ ํ•˜๋ฉด ๋จ
        • ์ธ๋ฑ์Šค ๋งŒ๋“ค๊ธฐ
            1. ์ฒซ ๋ฒˆ์งธ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฒ€์ƒ‰ํ•  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ง€์ •
            1. ์ ‘๋‘์–ด๋ฅผ ์ œ๊ณตํ•ด์„œ ๊ทธ๊ฒƒ์„ ์ง€์ •ํ•˜๊ธฐ = ์–ด๋–ค ๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘๋˜๋Š” ๋ชจ๋“  ํ•ด์‹œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ
            • ex) 'items#a1' 'items#b2' : items#๋ผ๋Š” ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ํ•ด์‹œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Œ
            • RediSearch๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์ ‘๋‘์–ด๋ฅผ ์ œ๊ณตํ•ด์„œ ๊ทธ๊ฑธ ์ง€์ •
            • RediSearch๋Š” ๊ทธ ํ•ด์‹œ, ์ด๋ฆ„, ์ƒ‰์ƒ, ๊ฐ€๊ฒฉ์— ๊ด€ํ•œ ์ž‘์€ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๊ฒŒ ๋จ
        • ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด -> ์›ํ•˜๋Š” ํšŸ์ˆ˜๋งŒํผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
        • ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํŠน์ •ํ•œ ์ด๋ฆ„, ์ƒ‰์ƒ, ๊ฐ€๊ฒฉ ๋“ฑ์„ ๊ฐ€์ง„ ํ•ญ๋ชฉ์„ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ
        • FT.CREATE
      • [2] ์ธ๋ฑ์Šค ์‚ฌ์šฉ
        • FT.SEARCH

์ธ๋ฑ์Šค

์ธ๋ฑ์Šค ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ

  • ์ƒˆ๋กœ์šด ์ธ๋ฑ์Šค ๋งŒ๋“œ๋Š” ๋ช…๋ น์–ด 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]'

        ์ธ๋ฑ์Šค ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

  • ์ฟผ๋ฆฌ์™€ ๊ฒ€์ƒ‰์˜ ์ฐจ์ด์ 
    • ์ฟผ๋ฆฌ
      • ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๋ณดํ†ต ์–ธ์ œ๋‚˜ ๊ธฐ์กด์˜ ์ •ํ™•ํ•œ ๊ธฐ์ค€๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ์„ธํŠธ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ•จ
      • ์ฟผ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ ์„ธํŠธ๋ฅผ ์ฐพ๋Š” ๊ฒฝ์šฐ
    • ๊ฒ€์ƒ‰
      • ๊ฒ€์ƒ‰์„ ์ด์šฉํ•˜์—ฌ ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒฐ๊ณผ๋Š” ๊ธฐ์ค€์— ์ •ํ™•ํžˆ ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์„์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ฐพ์œผ๋ ค๋Š” ๊ฒƒ์— ์•„์ฃผ ๊ทผ์ ‘ํ•œ ์ถ”์ธก ๊ฐ™์€ ๊ฒƒ
      • ๊ฒ€์ƒ‰์€ ๊ฒฐํ•จ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด๋‚˜ ๊ฒฐํ•จ ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ํ•ด์„ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ์ตœ์„ ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋ ค๋Š” ๊ฒฝ์šฐ
      • 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 ๋ผ๊ณ  ์ž…๋ ฅํ•˜๋ฉด ํผ์ง€๊ฒ€์ƒ‰ ์‚ฌ์šฉ
  • ์‚ฌ์šฉ์ž์˜ ์˜คํƒ€ ์ฒ˜๋ฆฌ ex) fast fasty fast car
  • ๊ฒ€์ƒ‰๋กœ์ง์€ ๋งŒ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋”ฐ๋ผ ์ตœ์ ์ด ๋‹ค๋ฅด๋‹ค (159๊ฐ•. 04:00 ๋‹ค์‹œ ํ™•์ธ)