scout
Scout
Eloquent ๋ชจ๋ธ์ ๋ํด full-text ๊ฒ์ ๊ธฐ๋ฅ์ ์ฅ์ฐฉ ํ ์ ์๋ ๋๋ผ์ด๋ฒ ๊ธฐ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ชจ๋ธ ์ต์ ๋ฒ๋ฅผ ์ฌ์ฉํด์ ์๋กํํธ ๋ ์ฝ๋์ ๋๊ธฐํํ์ฌ ๊ฒ์ ์ธ๋ฑ์ค๋ฅผ ์๋์ผ๋ก ์ ์งํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Aloglia
๋๋ผ์ด๋ฒ๋ฅผ ๋ด์ฅํ๋ฉฐ, ๋ค๋ฅธ ๋๋ผ์ด๋ฒ๋ฅผ ์ด์ฉํ๊ฑฐ๋ ์ปค์คํ
๋๋ผ์ด๋ฒ๋ฅผ ์์ฑํ ์ ์๋ค.
๊ฒ์ ๋ฐฉ๋ฒ
MySQL์ ํ๋์ ๋ํด
like %~%
๊ตฌ๋ฌธ์ ํตํด ์ ์ ํ ๋จ์ด๋ฅผ ๊ฒ์ํ๊ธฐMySQL์ full-text ์์ง ์ด์ฉํ๊ธฐ
Scout๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ full-text ๊ฒ์์์ง ์ด์ฉํ๊ธฐ
1.์ ๋ฐฉ๋ฒ์ ํ๋๊ฐ ๋ง์ ์๋ก, content๊ฐ ๊ธธ ์๋ก ๊ฒ์ ์๊ฐ์ด ๋๋ฌด ์์๋๋ฉฐ 2๋ฒ์ ๋ฐฉ๋ฒ์ Eloquent๋ชจ๋ธ๊ณผ ๋๊ธฐํ๊ฐ ํ๋ค๋ฉฐ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด์ผํจ
๋ฐ๋ผ์ ์ด๋ฒ ํ๋ก์ ํธ์๋ 3๋ฒ์ ๋ฐฉ๋ฒ์ ์ด์ฉํ๊ธฐ๋ก ํจ!
๊ฒ์ ์์ง ๋๋ผ์ด๋ฒ
Algolia Scout์ ๊ธฐ๋ณธ ๋๋ผ์ด๋ฒ์ด์ง๋ง, ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ ๊ฒ์์์ง์ผ๋ก ์ด์ฉํ๊ธฐ ์ํด ํ์๊ฐ์ ๊ณผ ์ฑ์์ ๋คํธ์ํฌ๋ฅผ ํตํ ์ ์์ด ํ์ํ๊ณ ์๊ธ์ ์ด๋ค. => ๋๋ ๋์ด์ง๋ง VDI๋ด๋ถ์์ ์ธ๋ถ์ ์์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ ค
Elastic Search ์ ๋ช ํ ๊ฒ์์์ง์ด๋ฉฐ
๋ ธ๋ฆฌ
๋ผ๋ ํ๊ธ ํํ์ ๋ถ์๊ธฐ๋ฅผ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ด์ฅ๋์ด ์์ด ํ๊ธ์ ์ ์ฅํ๊ณ ๋ถ์/ํ์ํ๋๋ฐ๋ ์ ํฉ๊ถ์ฅ ์ฌ์์ด ์ต์ 2core์ด์์ cpu์ ram 4gb์ด์์ด ํ์ํ๋ฉฐ ์ด๋ ์ต์ ์ฌ์์ด๊ณ ๋ณดํต ๋ง์คํฐ ๋ ธ๋์ ๋ฐ์ดํฐ ๋ ธ๋/ ํด๋ผ์ด์ธํธ ๋ ธ๋ ๋ฑ์ผ๋ก ๋๋์ด ๊ตฌ์ฑํ๋๋ฐ ์ด๋ ํ์ฌ ํ๊ฒฝ๊ณผ ๊ธฐ๊ฐ๋ด์๋ ๋น ๋ฏ ํ ์๋ ์์ผ๋ฉฐ ๊ณผ์คํ์ด๋ผ๊ณ ํ๋จํ์ฌ ์ ์ธ
๋ง์คํฐ ๋ ธ๋
์ธ๋ฑ์ค์ ๋ฉํ ๋ฐ์ดํฐ, ์ค๋(์์ธ์ ์กฐ๊ฐ์ผ๋ก ๋ถํ )์ ์์น์ ๊ฐ์ ํด๋ฌ์คํฐ ใ ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ํํ๋ฉฐ, ํด๋ฌ์คํฐ๋ง๋ค ํ๋์ ๋ง์คํฐ ๋ ธ๋๊ฐ ์กด์ฌํ๊ณ ์ด ์ญํ ์ ์ํํ ์ ์๋ ๋ ธ๋๊ฐ ์๋ค๋ฉด ์๋์ด ์ ์ง
๋ฐ์ดํฐ ๋ ธ๋
์ค์ ๋ก ์์ธ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ ธ๋๋ก ๋ง์คํฐ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์๋ ์์ง๋ง ๋ถ๋ฆฌํ์ฌ ์๋ก ๊ฐ์์ ์ญํ ์๋ง ์ง์คํ ์ ์๊ฒ ๋ถ๋ฆฌํ๋๊ฒ ์ผ๋ฐ์
Meili Search ์คํ ์์ค FTS๋ก
Rust
๋ก ๋ง๋ค์ด์ ธ ๋ณ๋์ ์์กด์ฑ ์์ด ๊ฐ๋จํ ์ค์ ์ผ๋ก ๊ฒ์์์ง ์๋ฒ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
ํ๊ธ ํํ์ ์ฌ์ ์ด ํ์ฌ๋์ง ์์์ ํ๊ธ ๊ฒ์ ํ์ง์ ๋ฎ๋ค.
VDI๋ด๋ถ๋ก ์ค์นํ์ผ์ ๊ฐ์ง๊ณ ๊ฐ์ ์ค์น ํ ๋ฑ๋กํด ์ฌ์ฉํด์ผ ํ๋ฉฐ ๊ธฐ๋ณธ DB์ฌ์ด์ฆ๋ฅผ 100gb๋ฅผ ์ก๊ธฐ ๋๋ฌธ์ size์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
TNT Search ์คํ์์ค FTS๋ก PHP๋ก ๋ง๋ค์ด์ก๋ค. ์๋ฒ์ ๋ณ๋ค๋ฅธ ๊ฒ์์์ง์๋ฒ ์ค์น ์์ด laravel์ ์์กด์ฑ๋ง ์ถ๊ฐํด์ฃผ๋ฉด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ( php7, php pdo extension, sqlite extension, mbstring extension, laravel5.6 ์ด์ )
์ ๊ณต ๊ธฐ๋ฅ - ํผ์ง ๊ฒ์ (๋น์ทํ ๋จ์ด ๊ฒ์) - ํ ์คํธ ๋ถ๋ฅ - ํํ์ ๋ถ์ - ์ฌ์ฉ์ ์ ์ ํ ํฌ๋์ด์ - bool ๊ฒ์
TNTSearch๊ฐ ์ ์ฉ๋ ๊ฐ๋จํ๋ฉฐ ๊ฒ์์์ง์ commit์ด 3๊ฐ์, scout driver๋ 2๊ฐ์ ์ ๊ธฐ๋ก์ผ๋ก ๋น๊ต์ ์ต์ ๊น์ง ์ ๋ฐ์ดํธ๊ฐ ๋์ด ์์ด ์ฐ์ TNT Search๋ฅผ ์ด์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์ค๊ณํ ๊ณํ
tntsearch driver๋ง ์ค์นํ๋ฉด ๋ณ๋์ scout์์กด์ฑ์ ์ถ๊ฐํด์ฃผ์ง ์์๋ ๋๋ค.
TNT Search ์๋ ๋ฐฉ์
1. ์ธ๋ฑ์ค ํ์ผ ์์ฑ
์ธ๋ฑ์ค ํ์ผ์ ๋ด๋ถ์ ์ผ๋ก SQLite๋ฅผ ์ด์ฉํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ ๊ฐ๋ค. (์์ธํ ์ค๋ช ์ด ์๋์์์ด ์ถ์ธก์ด๋ค.)
์ปจํธ๋กค๋ฌ๋ฅผ ์ด์ฉํด ์ค์ ํ์ผ๋ก DB์ ์ง์ ์ ์ํด ์ธ๋ฑ์ค ํ์ผ์ ๋ง๋ค๊ฑฐ๋, scout ๊ณต์๋ฌธ์์ ์ค๋ช
ํ๋๋ก ๋น์ด์๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด storage/ ๋ฐ์ *.index
๋ก ์์ฑ์ด๋๋ค.
2. ๊ฒ์
scout๋ฅผ ์ด์ฉํ๋ฉด search()
๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ๊ฒ์์ด ๊ฐ๋ฅํ๋ฉฐ ๊ฒ์์ํ์ ์ธ๋ฑ์ค ํ์ผ ๋ด์์ ์ผ์นํ๋ ํญ๋ชฉ๋ค์ ์ฐพ๊ณ DB ํ์ ๊ธฐ๋ณธํค ๋ชจ์์ ๋ฐํํ๋ค.
๊ทธ ํ get()
๋ฉ์๋๋ฅผ ์ํํ๋ฉด ๊ธฐ๋ณธํค๋ค์ ๋ฐํ์ผ๋ก select ~ where in()
์ ์ ์ํํ์ฌ ๊ฐ์ ์ ๋ณด๋ฅผ ์กฐํํ๋ค. Collection์ผ๋ก ๋ฐํ๋๋ ๊ฒ.
๋ฌธ์ ์ | ํด๊ฒฐํด์ผ ํ ์
์ด ํ๋ก์ ํธ๋ ํ๊ธ ํํ์ ๋ถ์๊ธฐ๊ฐ ์กด์ฌํ์ง ์์ ๊ฒ์ ๊ฒฐ๊ณผ ์ ํ๋๊ฐ ๋จ์ด์ง ์๋ ์๋ค.
๋ณ๋์ ํ๊ธ ํํ์ ๋ถ์๊ธฐ์ค ์คํ์์ค์ธ ์์ ํ ๋ข(mecab)
์ ์ด์ฉํด์ ์ ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ํ์ ์๊ฐํด๋ณด์. => elasticsearch๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฑ๋ฅ์ด ๋ ์ข์ ์๋?
Last updated