🎯 λ§€ν•‘ 섀계 μž˜ν•˜λŠ” 팁 & μ „λž΅

이 λ¬Έμ„œλŠ” Elasticsearchμ—μ„œ λ§€ν•‘(mapping)을 효율적으둜 μ„€κ³„ν•˜κΈ° μœ„ν•œ 팁과 κ°œλ…λ“€μ„
http://localhost:9200/contents κΈ°μ€€μœΌλ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.


1. 🎯 λ§€ν•‘ 섀계 μž˜ν•˜λŠ” 팁

🧹 λΆˆν•„μš”ν•œ ν•„λ“œ 제거

  • μ €μž₯ν•  ν•„μš”κ°€ μ—†λŠ” λ°μ΄ν„°λŠ” λ§€ν•‘ 자체λ₯Ό ν•˜μ§€ μ•Šκ±°λ‚˜ _sourceμ—μ„œ μ œμ™Έ
  • 검색/필터링/집계에 쓰이지 μ•ŠλŠ” λ°μ΄ν„°λŠ” μ œμ™Έν•˜λŠ” 것이 μ„±λŠ₯에 유리

🧷 νƒ€μž… λͺ…ν™•νžˆ μ§€μ •

데이터 μ˜ˆμ‹œμ μ ˆν•œ νƒ€μž…
λ‚ μ§œdate
μ •μˆ˜integer
가격float
이메일, URLkeyword
λ³Έλ¬Έ, μ„€λͺ…, 제λͺ©text

🚫 동적 λ§€ν•‘(auto mapping) 주의

  • μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ text + keyword둜 맀핑됨 β†’ μ›μΉ˜ μ•ŠλŠ” 뢄석기 적용 κ°€λŠ₯μ„±
  • λͺ…μ‹œμ μΈ λ§€ν•‘ μ •μ˜ ꢌμž₯

2. βš–οΈ text vs keyword

ν•­λͺ©textkeyword
뢄석 여뢀뢄석됨 (tokenizer, filter 적용)λΆ„μ„λ˜μ§€ μ•ŠμŒ (전체값 κ·ΈλŒ€λ‘œ)
검색 λͺ©μ μ „λ¬Έ(full-text) κ²€μƒ‰μ •ν™•ν•œ 일치, 집계/μ •λ ¬/ν•„ν„°μš©
μ˜ˆμ‹œ ν•„λ“œμ œλͺ©, λ‚΄μš©, λŒ“κΈ€ID, 이메일, νƒœκ·Έ, μΉ΄ν…Œκ³ λ¦¬

3. πŸ”€ multi-field μ „λž΅

🧠 ν•˜λ‚˜μ˜ ν•„λ“œλ₯Ό μ—¬λŸ¬ λ°©μ‹μœΌλ‘œ ν™œμš©

예: title ν•„λ“œλ₯Ό 검색도 ν•˜κ³ , μ •λ ¬/집계도 ν•˜λ €λ©΄?

"title": {
  "type": "text",
  "fields": {
    "raw": {
      "type": "keyword"
    }
  }
}
  • title: λΆ„μ„λœ text ν•„λ“œ β†’ κ²€μƒ‰μš©
  • title.raw: keyword ν•„λ“œ β†’ μ •λ ¬/μ§‘κ³„μš©

4. 🧩 object vs nested 차이

object (ν‰ν‰ν•œ ꡬ쑰)

"author": {
  "type": "object",
  "properties": {
    "name": { "type": "text" },
    "email": { "type": "keyword" }
  }
}
  • μž₯점: 간단함
  • 단점: 배열일 경우 κ°’μ˜ λ§€μΉ­ 였λ₯˜ λ°œμƒ κ°€λŠ₯

nested (관계 보μž₯)

"comments": {
  "type": "nested",
  "properties": {
    "user": { "type": "keyword" },
    "content": { "type": "text" }
  }
}
  • μž₯점: 각각의 λ°°μ—΄ μ›μ†Œκ°€ 독립적인 λ¬Έμ„œμ²˜λŸΌ μ²˜λ¦¬λ˜μ–΄ μ •ν™•ν•œ λ§€μΉ­ κ°€λŠ₯
  • 단점: 쿼리가 μ•½κ°„ λ³΅μž‘ν•¨

🧾 μš”μ•½ 정리

μ „λž΅ ν•­λͺ©ν•΅μ‹¬ μš”μ•½
ν•„λ“œ μ΅œμ†Œν™”κΌ­ ν•„μš”ν•œ ν•„λ“œλ§Œ μ €μž₯
νƒ€μž… λͺ…ν™•ν™”μˆ«μž/λ‚ μ§œ/ν…μŠ€νŠΈ νƒ€μž… ꡬ뢄
text vs keyword검색 vs μ •λ ¬/μ§‘κ³„μš© ꡬ뢄
multi-field μ‚¬μš©ν•˜λ‚˜μ˜ ν•„λ“œλ₯Ό μ—¬λŸ¬ μš©λ„λ‘œ ν™œμš© (text + keyword)
nested ꡬ쑰 ν™œμš©λ°°μ—΄ λ‚΄ 관계λ₯Ό μ •ν™•νžˆ 보μž₯ν•΄μ•Ό ν•  경우 μ‚¬μš©