๐Ÿ”ฐ๊ธฐ๋ณธ ๊ฐœ๋…

์ด ๋ฌธ์„œ๋Š” Elasticsearch๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ธ๋ฑ์Šค, ๋งคํ•‘, ๊ตฌ์กฐ ๋“ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์ œ URL์€ http://localhost:9200/contents ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.


1. ๐Ÿ“Œ /contents๋Š” ๋ฌด์—‡์ธ๊ฐ€?

  • http://localhost:9200/contents ์—์„œ contents๋Š” ์ธ๋ฑ์Šค(index) ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • Elasticsearch์—์„œ ์ธ๋ฑ์Šค๋Š” ๋ฌธ์„œ๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
  • RDB๋กœ ๋น„์œ ํ•˜๋ฉด **ํ…Œ์ด๋ธ”(table)**์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

2. ๐Ÿงฑ Elasticsearch ๊ตฌ์กฐ ์š”์•ฝ

Elasticsearch๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

ํด๋Ÿฌ์Šคํ„ฐ
  โ””โ”€โ”€ indices (๋ณต์ˆ˜ํ˜•, ์—ฌ๋Ÿฌ ์ธ๋ฑ์Šค)
        โ””โ”€โ”€ index (์˜ˆ: contents)
              โ””โ”€โ”€ documents (JSON ํ˜•์‹ ๋ฐ์ดํ„ฐ)
                    โ””โ”€โ”€ fields (๊ฐ ๋ฐ์ดํ„ฐ์˜ ์†์„ฑ)
RDB ์šฉ์–ดElasticsearch ์šฉ์–ด
DatabaseCluster
TableIndex
RowDocument
ColumnField

3. ๐Ÿ“„ ๋งคํ•‘(Mapping) ๊ฐœ๋…๊ณผ _mapping์˜ ์—ญํ• 

  • **๋งคํ•‘(mapping)**์ด๋ž€ ์ธ๋ฑ์Šค ๋‚ด ๋ฌธ์„œ์˜ ํ•„๋“œ ๊ตฌ์กฐ์™€ ํƒ€์ž…์„ ์ •์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ํ•„๋“œ๊ฐ€ text์ธ์ง€ keyword์ธ์ง€, ๋‚ ์งœ์ธ์ง€ ์ˆซ์ž์ธ์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • RDB๋กœ ์น˜๋ฉด ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ(schema) ์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

โœ… ๋งคํ•‘ ํ™•์ธ ๋ฐฉ๋ฒ•

GET http://localhost:9200/contents/_mapping?pretty
  • ์œ„ ์š”์ฒญ์€ contents ์ธ๋ฑ์Šค์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋Š” API์ž…๋‹ˆ๋‹ค.

๐Ÿ”  ๋Œ€ํ‘œ์ ์ธ ํ•„๋“œ ํƒ€์ž…

ํ•„๋“œ ํƒ€์ž…์„ค๋ช…
text๊ฒ€์ƒ‰์šฉ ํ…์ŠคํŠธ (analyzer๋กœ ํ˜•ํƒœ์†Œ ๋ถ„์„ ๊ฐ€๋Šฅ)
keywordํ•„ํ„ฐ, ์ •๋ ฌ, ์ง‘๊ณ„์šฉ ๋ฌธ์ž์—ด (๋ถ„์„ ๋ถˆ๊ฐ€)
integer์ •์ˆ˜ํ˜• ์ˆซ์ž
float์‹ค์ˆ˜ํ˜• ์ˆซ์ž
date๋‚ ์งœ/์‹œ๊ฐ„ ์ •๋ณด
booleantrue/false ๊ฐ’

โœ… ์ •๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉ์„ค๋ช…
/contents์ธ๋ฑ์Šค ์ด๋ฆ„ (RDB์˜ ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌ)
์ธ๋ฑ์Šค ๊ตฌ์กฐํด๋Ÿฌ์Šคํ„ฐ โ†’ ์ธ๋ฑ์Šค โ†’ ๋ฌธ์„œ โ†’ ํ•„๋“œ
๋งคํ•‘(Mapping)๋ฌธ์„œ์˜ ํ•„๋“œ ๊ตฌ์กฐ ์ •์˜ (ํƒ€์ž…, ๋ถ„์„๊ธฐ ๋“ฑ)
_mapping API์ธ๋ฑ์Šค์˜ ํ˜„์žฌ ๋งคํ•‘ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ