๐จ ์ค์ ๋งคํ ์ค์ ๋ชจ์
์ด ๋ฌธ์๋ Elasticsearch๋ฅผ ์ฌ์ฉํ ๋ ์์ฃผ ๋ฐ์ํ๋ ๋งคํ ์ค๊ณ ์ค์ ์ฌ๋ก๋ค์ ์ ๋ฆฌํ ๊ฐ์ด๋์ ๋๋ค.
์ค์๋ฅผ ํผํ๊ธฐ ์ํ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ ํจ๊ป ์๊ฐํฉ๋๋ค.
1. โ keyword ํ๋์ match ์ฌ์ฉ
๋ฌธ์ ์ค๋ช
keyword
ํ๋๋ ๋ถ์๋์ง ์์ ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ match
์ฟผ๋ฆฌ๋ก๋ ๋์ํ์ง ์์.
"match": {
"status": "published" // keyword ํ๋์ผ ๊ฒฝ์ฐ ๋์ X
}
ํด๊ฒฐ ๋ฐฉ๋ฒ
match
๋์term
์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํจ
"term": {
"status": "published"
}
2. โ text ํ๋๋ก ์ ๋ ฌ
๋ฌธ์ ์ค๋ช
text
ํ๋๋ ๋ถ์๋ ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ์ฑ๋ฅ์ด ๋งค์ฐ ๋์จ.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- multi-field๋ฅผ ํ์ฉํ์ฌ
text
+keyword
๊ตฌ์กฐ๋ก ์ค๊ณ - ์ ๋ ฌ์
.raw
๋๋keyword
ํ๋๋ก ์ํ
"title": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
3. โ ๏ธ ๋์ ๋งคํ ์ค์ฉ (dynamic mapping)
๋ฌธ์ ์ค๋ช
- JSON ๋ฌธ์์ ๋ฐ๋ผ ์๋์ผ๋ก ํ๋ ํ์ ์ด ์ง์ ๋จ
- ์:
"price": "100"
โ ๋ฌธ์์ด๋ก ์ ์ฅ๋์ด ์ง๊ณ/์ ๋ ฌ ๋ถ๊ฐ๋ฅ
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์ฌ์ ์ ๋ช ์์ ๋งคํ ์ง์
- ๋๋
dynamic: strict
๋ก ์์ธ ์ฒ๋ฆฌ
"dynamic": "strict"
4. ๐ฅ ํ๋ ํญ๋ฐ (Field Explosion)
๋ฌธ์ ์ค๋ช
- JSON ๊ตฌ์กฐ์ ๋ฐ๋ผ 1,000๊ฐ ์ด์์ ํ๋๊ฐ ์์ฑ๋๋ ๊ฒฝ์ฐ
- ์: ์ฌ์ฉ์ ์ ์ ํ๋๊ฐ ๋๋ฌด ๋ง์ ๊ฒฝ์ฐ
๋ฌธ์ ์
- ๋งคํ ํฌ๊ธฐ ์ฆ๊ฐ, ๊ฒ์ ์ฑ๋ฅ ์ ํ, ํด๋ฌ์คํฐ ๋ถ์์
ํด๊ฒฐ ๋ฐฉ๋ฒ
flattened
ํ์ ์ฌ์ฉ ๋๋ nested ํ๋ ๊ตฌ์กฐ ์ฌ์ค๊ณ
"custom_fields": {
"type": "flattened"
}
5. ๐ date/integer ํ์ ๋๋ฝ
๋ฌธ์ ์ค๋ช
- ๋ ์ง๋ ์ซ์ ํ๋๋ฅผ ๋ช ์ํ์ง ์์ ๋ฌธ์์ด๋ก ์ ์ฅ๋จ
- ๊ฒ์, ์ ๋ ฌ, ์ง๊ณ์ ์ค๋ฅ ๋ฐ์
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ๋ช
์์ ์ผ๋ก
date
,integer
,long
ํ์ ์ค์
"created_at": {
"type": "date"
},
"count": {
"type": "integer"
}
โ ์์ฝ ์ ๋ฆฌ
์ค์ ํญ๋ชฉ | ๋ฐ์ ์์ธ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
---|---|---|
keyword์ match ์ฌ์ฉ | ๋ถ์ ๋ถ๊ฐ๋ฅ ํ๋์ match ์ฌ์ฉ | term ์ฟผ๋ฆฌ๋ก ๋ณ๊ฒฝ |
text ์ ๋ ฌ | ๋ถ์๋ ํ๋๋ก ์ ๋ ฌ ์๋ | keyword ์๋ธํ๋๋ก ์ ๋ ฌ |
dynamic mapping ๊ณผ์ฉ | ์๋ ํ์ ์ง์ ์ ์์กด | ๋ช ์์ ๋งคํ ๋๋ strict ์ ์ฉ |
ํ๋ ํญ๋ฐ | ํ๋ ์ ๊ณผ๋ํ๊ฒ ๋ง์ | flattened ํ์ ๋๋ ์ค๊ณ ๋ณ๊ฒฝ |
date/integer ๋๋ฝ | ๋ฌธ์์ด๋ก ์ ์ฅ๋จ | ํ์ ๋ช ์: date, integer ๋ฑ |