[MongoDB] atlas search

atlas์—์„œ๋Š” Elasticsearch์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ์™€ ๊ฒฝํ—˜์„ ๊ฐ€์ง€๋Š” search ์ „์šฉ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•œ๋‹ค.

Elasticsearch์ฒ˜๋Ÿผ Lucene์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜•ํƒœ์†Œ ๋ถ„์„์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋™์˜์–ด(synonym), score ๊ธฐ๋ฐ˜์˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฒ”์šฉ DB์—์„œ ๊ฐ๋‹นํ•˜๊ธฐ ํž˜๋“  ๋ณต์žกํ•œ ํ•„ํ„ฐ๋‚˜ ์ •๋ ฌ์— ๋Œ€ํ•ด์„œ๋„ ์ค€์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•œ๋‹ค.

mongoDB ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ”๋กœ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ํฐ ์žฅ์ ์ด๋‹ค. ๊ท€์ฐฎ๊ฒŒ ๋กœ๊ทธ์Šคํƒœ์‹œ ๋„์›Œ์„œ ๋™๊ธฐํ™” ์‹œํ‚ค๊ณ  ๊ทธ๋Ÿฌ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.




๊ตฌ์กฐ

Atlas search๋Š” ์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

๋’ท๋‹จ์— mongot๋ฅผ ๋น„๋กฏํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹œ์Šคํ…œ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค search ์ธ๋ฑ์Šค์— ๋™๊ธฐํ™”๋ฅผ ์‹œ์ผœ์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์œ ์ €๋Š” search ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

๋”ฑํžˆ ํŠน์ดํ• ๊ฑด ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค.




search index ์ƒ์„ฑ

๋จผ์ € ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ๋ฉ”์ธํŽ˜์ด์ง€์— ๋œจ๋Š” ์ €๊ฑธ ๋ˆ„๋ฅด๊ฑฐ๋‚˜


ํด๋Ÿฌ์Šคํ„ฐ search ํƒญ์˜ ์ € ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค.


๋น„์ฃผ์–ผ ์—๋””ํ„ฐ


์—ฌ๊ธฐ์„œ ์ธ๋ฑ์‹ฑํ•  ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•œ๋‹ค.


๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ์ด ๋œจ๋Š”๋ฐ


refine...์„ ๋ˆ„๋ฅด๋ฉด ์ปค์Šคํ…€์„ ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ผ๋‹จ ๊ธฐ๋ณธ์„ค์ •์œผ๋กœ ๊ฐ€๋ณด๊ฒ ๋‹ค.


์ƒ์„ฑํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ์ธ๋ฑ์Šค๊ฐ€ ์ถ”๊ฐ€๋  ๊ฒƒ์ด๊ณ 


์ข€ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ํ™œ์„ฑํ™”๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.




๊ฒ€์ƒ‰ํ•ด๋ณด๊ธฐ

๊ธฐ์กด์— text ์ธ๋ฑ์Šค๋งŒ์„ ์“ธ๋•Œ๋Š” ์ง์ ‘ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , $text ๋“ฑ์˜ ํ•„ํ„ฐ ์ ˆ์„ ํ†ตํ•ด ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค.

https://blog.naver.com/sssang97/222987710006
ํ•˜์ง€๋งŒ atlas search์—์„œ๋Š” $search๋ผ๋Š” ์ „์šฉ ํ•„๋“œ๋ฅผ ํ†ตํ•ด ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋งŒ๋“ค์–ด์ง„ search index ํƒญ์—์„œ ๋ฐ”๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ

์ € ์ฟผ๋ฆฌ๋Š” name ํ•„๋“œ๊ฐ€ "๋ถˆ๋‹ญ๋ณถ์Œ๋ฉด"์ธ ํ•„๋“œ๋งŒ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด mongoDB api๋ฅผ ํ†ตํ•ด์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. aggregate ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์ ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ

์ด๋ ‡๊ฒŒ $search๋ผ๊ณ  atlas search๋งŒ์„ ์œ„ํ•ด ์˜ˆ์•ฝ๋œ ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค.
์•„๋งˆ altas ๋ฐ–์—์„œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๋” ์ƒ์„ธํ•œ ๋‚ด์šฉ์€ ๋ณ„๋„ ํฌ์ŠคํŠธ๋กœ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.




์ธ๋ฑ์Šค ๋งคํ•‘

๋ณ„๋‹ค๋ฅธ ์„ค์ •์„ ์ฃผ์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ ๊ตฌ์„ฑ์ด ๋  ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌ๋ฉด ์•Œ์•„์„œ ๋ชจ๋“  ํ•„๋“œ์— ๋Œ€ํ•ด์„œ ์ธ๋ฑ์‹ฑ์„ ํ•ด์ฃผ๋Š”๋ฐ, ์„ฑ๋Šฅ์ ์œผ๋กœ๋Š” ๋น„ํšจ์œจ์ ์ธ ๋ถ€๋ถ„์ด ํฌ๋‹ค.
๋””์Šคํฌ๋„ ํ›จ์”ฌ ๋งŽ์ด ๋จน๊ณ , ์ธ๋ฑ์‹ฑ ์„ฑ๋Šฅ๋„ ๋–จ์–ด์ง„๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์•ˆ์ •์ ์œผ๋กœ ์“ฐ๋ ค๋ฉด ์ด๋ ‡๊ฒŒ, dynamic ๋งคํ•‘์„ ๋„๊ณ  ์ •์ ์œผ๋กœ ๋งคํ•‘ํ•ด์•ผ ํ•œ๋‹ค.



์ฐธ์กฐ
https://www.mongodb.com/docs/atlas/atlas-search/
https://www.mongodb.com/docs/atlas/atlas-search/atlas-search-overview/
https://www.mongodb.com/docs/manual/reference/operator/aggregation/search/
https://www.mongodb.com/docs/atlas/atlas-search/define-field-mappings/