๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ—„๏ธ Database

์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ๊ฐ€์ด๋“œ

by discphy 2022. 11. 22.
๋ฐ˜์‘ํ˜•

์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ๊ฐ€์ด๋“œ

์šฉ์–ด ์ •๋ฆฌ


๐Ÿ’ก ๊ฐœ๋…

ES์˜ ๊ฐœ๋… ์šฉ์–ด

  • ์ƒ‰์ธ (indexing) : ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒ€์ƒ‰๋  ์ˆ˜ ์žˆ๊ฒŒ ์›๋ณธ์„ ํ† ํฐ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๊ณผ์ •
  • ์ธ๋ฑ์Šค (index, indices) : ์ƒ‰์ธ ๊ณผ์ •์„ ๊ฑฐ์นœ ๊ฒฐ๊ณผ๋ฌผ, ์ƒ‰์ธ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ €์žฅ์†Œ โ†’ ๋„ํ๋จผํŠธ๋“ค์˜ ์ง‘ํ•ฉ
  • ๊ฒ€์ƒ‰ (search) : ์ธ๋ฑ์Šค์— ๋“ค์–ด์žˆ๋Š” ๊ฒ€์ƒ‰์–ด ํ† ํฐ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋„ํ๋จผํŠธ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •
  • ์งˆ์˜ (query) : ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋„ํ๋จผํŠธ๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€์ƒ‰ ์‹œ ์ž…๋ ฅํ•˜๋Š” ๊ฒ€์ƒ‰์–ด ๋˜๋Š” ๊ฒ€์ƒ‰ ์กฐ๊ฑด
  • ๋„ํ๋จผํŠธ (document) : ์›๋ณธ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ‰์ธ ๊ณผ์ •์„ ํ†ตํ•ด ์ƒ‰์ธ๋œ ๋ฐ์ดํ„ฐ, ๋ฌธ์„œ๋ผ๊ณ  ์นญํ•˜๊ธฐ๋„ ํ•จ, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์‹œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„ํ๋จผํŠธ ์ถœ๋ ฅ โ†’ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๋‹จ์œ„

๐Ÿ’ก ๊ตฌ์กฐ

ES์˜ ๊ตฌ์กฐ ๊ด€๋ จ๋œ ์šฉ์–ด

  • ํด๋Ÿฌ์Šคํ„ฐ๋ง : ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ์Šค์ผ€์ผ ์•„์›ƒ๊ณผ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ โ†’ 1๊ฐœ์˜ ๋ฌผ๋ฆฌ์„œ๋ฒ„ ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
  • ๋””์Šค์ปค๋ฒ„๋ฆฌ : ๋…ธ๋“œ๊ฐ€ ์ฒ˜์Œ ์‹คํ–‰ ๋  ๋•Œ ๊ฐ™์€์„œ๋ฒ„, ๋˜๋Š” discovery.seed_hosts: [ ]์— ์„ค์ •๋œ ๋„คํŠธ์›Œํฌ ์ƒ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์„ ์ฐพ์•„ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ณผ์ •
  • ์ƒค๋“œ (shard) : ๋ฃจ์”ฌ์˜ ๋‹จ์ผ ๊ฒ€์ƒ‰ ์ธ์Šคํ„ด์Šค, ์ธ๋ฑ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒค๋“œ๋ผ๋Š” ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ๋˜๊ณ  ๊ฐ ๋…ธ๋“œ์— ๋ถ„์‚ฐ๋˜์–ด ์ €์žฅ
  • ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ (primary shard) : ์ฒ˜์Œ ์ƒ์„ฑ๋œ ์ƒค๋“œ
  • ๋ณต์ œ๋ณธ (replica) : ๋ณต์ œ๋ณธ
  • ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ (master node) : ์ƒค๋“œ์˜ ์œ„์น˜์™€ ๊ฐ™์€ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋…ธ๋“œ
  • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ : ์‹ค์ œ๋กœ ์ƒ‰์ธ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ
  • Split Brain : ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ, ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๋งˆ์Šคํ„ฐ ํ›„๋ณด ๋…ธ๋“œ๋ฅผ 3๊ฐœ ์ด์ƒ์˜ ํ™€์ˆ˜๋กœ ๊ตฌ์„ฑ

ํด๋Ÿฌ์Šคํ„ฐ์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ์ƒค๋“œ๋“ค์ด ๊ฐ ๋…ธ๋“œ๋“ค๋กœ ๋ถ„์‚ฐ๋˜๋ฉฐ, ๋””ํดํŠธ๋กœ 1๊ฐœ์˜ ๋ณต์ œ๋ณธ ์ƒ์„ฑ
โ†’ ์ƒค๋“œ์™€ ๋ณต์ œ๋ณธ์€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ ์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ €์žฅ

๋‹จ, ๋…ธ๋“œ๊ฐ€ 1๊ฐœ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ → ์ตœ์†Œ 3๊ฐœ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ ํ•  ๊ฒƒ์„ ๊ถŒ์žฅ

๐Ÿ’ก ์ฟผ๋ฆฌ

ES์˜ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ์šฉ์–ด

ํ’€ ํ…์ŠคํŠธ ์ฟผ๋ฆฌ (FULL TEXT QUERY)

  • match_all : ๋ณ„๋‹ค๋ฅธ ์กฐ๊ฑด์—†์ด ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๋ชจ๋“  ๋„ํ๋จผํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ฟผ๋ฆฌ
  • match : ๊ฒ€์ƒ‰์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋„ํ๋จผํŠธ ๊ฒ€์ƒ‰
  • match_phrase : ๊ฒ€์ƒ‰์–ด๊ฐ€ ๊ณต๋ฐฑ์„ ํฌํ•จํ•ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๋‚ด์šฉ์„ ๊ฒ€์ƒ‰

๋ณตํ•ฉ ์ฟผ๋ฆฌ (Bool Query) : ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ ์กฐํ•ฉ

  • must : ์ฟผ๋ฆฌ๊ฐ€ ์ฐธ์ธ ๋„ํ๋จผํŠธ๋ฅผ ๊ฒ€์ƒ‰
  • must_not : ์ฟผ๋ฆฌ๊ฐ€ ๊ฑฐ์ง“์ธ ๋„ํ๋จผํŠธ๋ฅผ ๊ฒ€์ƒ‰
  • should : ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ค‘ ์ฟผ๋ฆฌ์— ํ•ด๋‹น๋˜๋Š” ๋„ํ๋จผํŠธ์˜ ์ ์ˆ˜๋ฅผ ๋†’์ž„
  • filter : ์ฟผ๋ฆฌ๊ฐ€ ์ฐธ์ธ ๋„ํ๋จผํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์ง€๋งŒ ์Šค์ฝ”์–ด๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ์•Š์Œ (must ๋ณด๋‹ค๊ฐ€ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์บ์‹ฑ์ด ๊ฐ€๋Šฅ)

๋ฒ”์œ„ ์ฟผ๋ฆฌ (Range Query) : ์ˆซ์ž ๋‚ ์งœ ๊ฒ€์ƒ‰

  • gte (Greater-than or equal to) : ์ด์ƒ (๊ฐ™๊ฑฐ๋‚˜ ํผ)
  • gt (Greater-than) : ์ดˆ๊ณผ (ํผ)
  • lte (Less-than or equal to) : ์ดํ•˜ (๊ฐ™๊ฑฐ๋‚˜ ์ž‘์Œ)
  • lt (Less-than) : ๋ฏธ๋งŒ (์ž‘์Œ)

์ •ํ™•๋„ (Relevancy) : ๊ด€๋ จ์„ฑ ์—ฐ๊ด€์„ฑ

  • score์ ์ˆ˜ : ๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊ฒ€์ƒ‰ ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ ์ˆ˜๊ฐ€ ๋†’์€ ์ˆœ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์คŒ
  • TF(Term Frequency) : ๋„ํ๋จผํŠธ ๋‚ด์— ๊ฒ€์ƒ‰๋œ ํ…€(Term)์ด ๋งŽ์„์ˆ˜๋ก ์ ์ˆ˜๊ฐ€ ๋†’์•„์ง€๋Š” ๊ฒƒ
  • IDF(Inverse Document Frequency) : ๊ฒ€์ƒ‰ํ•œ ํ…€(Term)์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋„ํ๋จผํŠธ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์ ์ˆ˜๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ๊ฒƒ
  • Field Length : ๋„ํ๋จผํŠธ์—์„œ ํ•„๋“œ ๊ธธ์ด๊ฐ€ ํฐ ํ•„๋“œ ๋ณด๋‹ค๋Š” ์งง์€ ํ•„๋“œ์— ์žˆ๋Š” ํ…€์ด ํฌํ•จ ๋ ์ˆ˜๋ก ์ ์ˆ˜๊ฐ€ ๋†’์•„์ง

๐Ÿ’ก ์ธ๋ฑ์‹ฑ

ES์˜ ์ธ๋ฑ์‹ฑ ๊ด€๋ จ ์šฉ์–ด

  • ์—ญ ์ธ๋ฑ์Šค (Inverted Index) : ์ถ”์ถœ๋œ ํ…€(Term)์œผ๋กœ ๋„ํ๋จผํŠธ id๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
  • ์• ๋„๋ผ์ด์ € (Analyzer) : ๋ฌธ์ž์—ด ํ•„๋“œ๊ฐ€ ์ €์žฅ๋  ๋•Œ ๋ฐ์ดํ„ฐ์—์„œ ๊ฒ€์ƒ‰์–ด ํ† ํฐ์„ ์ €์žฅํ•˜๋Š” ์ฒ˜๋ฆฌ๊ณผ์ •์„ ํ…์ŠคํŠธ ๋ถ„์„(Text Analysis)๋ผ๊ณ  ํ•˜๋ฉฐ ์ด ๊ณผ์ •์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋œปํ•œ๋‹ค.
  • ์บ๋ฆญํ„ฐ ํ•„ํ„ฐ : ์ „์ฒด ๋ฌธ์žฅ์—์„œ ํŠน์ • ๋ฌธ์ž๋ฅผ ๋Œ€์น˜, ์ œ๊ฑฐ ๊ณผ์ •์„ ๋‹ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ
  • ํ† ํฌ๋‚˜์ด์ € : ์ „์ฒด ๋ฌธ์žฅ์— ์†ํ•œ ๋‹จ์–ด๋“ค์„ ํ…€ ๋‹จ์œ„๋กœ ํ•˜๋‚˜์”ฉ ๋ถ„๋ฆฌ ํ•ด ๋‚ด๋Š” ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๋‹ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ

์• ๋„๋ผ์ด์ € ๊ตฌ์„ฑ
: 0 - 3๊ฐœ์˜ ์บ๋ฆญํ„ฐ ํ•„ํ„ฐ(Character Filter)์™€ 1๊ฐœ์˜ ํ† ํฌ๋‚˜์ด์ €(Tokenizer), 0 - N(Token Filter)๊ฐœ์˜ ํ† ํฐ ํ•„ํ„ฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ

์ธ๋ฑ์Šค ์„ค์ • : settings

  • number_of_shards : ์ƒค๋“œ ๊ฐœ์ˆ˜ ์„ค์ •
  • number_of_replicas : ๋ณต์ œ๋ณธ ๊ฐœ์ˆ˜ ์„ค์ •
  • refresh_interval : ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฆฌํ”„๋ ˆ์‹œ ํƒ€์ž„

์€์ „ํ•œ๋‹ข ํ”Œ๋Ÿฌ๊ทธ์ธ : ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ

  • user_words : ์‚ฌ์šฉ์ž ์‚ฌ์ „
  • user_dict_path : ์‚ฌ์šฉ์ž ์‚ฌ์ „ ํŒŒ์ผ
  • decompound : ๋ณตํ•ฉ๋ช…์‚ฌ ๋ถ„ํ•ด (๋””ํดํŠธ true)
  • deinflect : ํ™œ์šฉ์–ด์˜ ์›ํ˜• ์ถ”์ถœ (๋””ํดํŠธ true)
  • index_eojeol : ์–ด์ ˆ ์ถ”์ถœ (๋””ํดํŠธ true)
  • index_poses : ์ถ”์ถœํ•  ํ’ˆ์‚ฌ (๋””ํดํŠธ ["N", "SL", "SH", "XR", "V", "M", "UNK"])
  • pos_tagging : ํ’ˆ์‚ฌํƒœ๊น…, ํ‚ค์›Œ๋“œ์— ํ’ˆ์‚ฌ๋ฅผ ๋ถ™์—ฌ์„œ ํ† ํฐ์„ ๋ฝ‘์Œ (๋””ํดํŠธ true)
  • max_unk_length : unknown ํ‚ค์›Œ๋“œ๋กœ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธธ์ด (๋””ํดํŠธ 8)
  1. ์‚ฌ์šฉ์ž ์‚ฌ์ „์€ ํ•˜๋‚˜๋งŒ ํ—ˆ์šฉ๋˜์–ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ† ํฌ๋‚˜์ด์ €๋ฅผ ์ƒ์„ฑํ•ด๋„ ๋งˆ์ง€๋ง‰ ๋กœ๋“œ๋œ ์‚ฌ์ „์œผ๋กœ ์œ ์ง€
  2. user_words์™€ user_dict_path๋ฅผ ํ•จ๊ป˜ ์„ค์ •ํ•  ๊ฒฝ์šฐ user_words๋ฌด์‹œ
  3. pos_tagging์ด true์ผ ๊ฒฝ์šฐ ํ‚ค์›Œ๋“œ์™€ ํ’ˆ์‚ฌ๊ฐ€ ํ•จ๊ป˜ ํ† ํฐ์œผ๋กœ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— stopword, synonym ํ•„ํ„ฐ ์‚ฌ์šฉ์‹œ ์ ์šฉ ์•ˆ๋จ
index_poses
1. UNK : ๋ฏธ์ง€์–ด
2. EP : ์„ ์–ด๋ง์–ด๋ฏธ
3. E : ์–ด๋ฏธ 
4. I : ๋…๋ฆฝ์–ธ 
5. J : ๊ด€๊ณ„์–ธ
6. M : ์ˆ˜์‹์–ธ 
7. N : ์ฒด์–ธ
8. S : ๋ถ€ํ˜ธ
9. SL : ์™ธ๊ตญ์–ด
10. SH : ํ•œ์ž
11. SN : ์ˆซ์ž
12. V : ์šฉ์–ธ
13. VCP : ๊ธ์ •์ง€์ •์‚ฌ
14. XP : ์ ‘๋‘์‚ฌ
15. XS : ์ ‘๋ฏธ์‚ฌ
16. XR : ์–ด๊ทผ

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

  • ๋งคํ•‘์—์„œ ํ•„๋“œ๋“ค์€ properties ํ•ญ๋ชฉ์˜ ์•„๋ž˜์— ์ง€์ •
  • ๋งคํ•‘์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๋„ํ๋จผํŠธ๋ฅผ ์ €์žฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋งคํ•‘ ์„ค์ • โ†’ ํ•„๋“œ ํƒ€์ž…์€ ๋“ค์–ด๊ฐ€๋Š” ์‹ค ๋ฐ์ดํ„ฐ ๋ณด๋‹ค ํฐ ๋ฒ”์œ„๋กœ ์ง€์ •์ด ๋จ

๐Ÿ’ก ๋งคํ•‘ ํ•„๋“œ

ES์˜ ํ•„๋“œ ๊ด€๋ จ ์šฉ์–ด

  1. ๋ฌธ์ž์—ด
  • text : ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํ…€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด ์—ญ ์ƒ‰์ธ (ํ’€ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์— ์‚ฌ์šฉํ•  ๋ฌธ์ž์—ด ํ•„๋“œ ๋“ค์„ textํƒ€์ž…์œผ๋กœ ์ง€์ •)
    1. analyzer : ์ƒ‰์ธ์— ์‚ฌ์šฉํ•  ์• ๋„๋ผ์ด์ € (๋””ํดํŠธ standard) โ†’ ํ† ํฌ๋‚˜์ด์ €, ํ† ํฐํ•„ํ„ฐ๋“ค์„ ๋”ฐ๋กœ ์ง€์ •ํ•  ์ˆ˜๊ฐ€ ์—†์Œ (์ธ๋ฑ์Šค ๋งคํ•‘์—์„œ ์„ค์ •)
    2. search_analyzer : ์ƒ‰์ธ์— ์‚ฌ์šฉํ•œ ์• ๋„๋ผ์ด์ €๊ฐ€ ์•„๋‹Œ ๊ฒ€์ƒ‰ ์‹œ์—๋งŒ ์ ์šฉ๋˜๋Š” ์• ๋„๋ผ์ด์ € โ†’ nGram์œผ๋กœ ์ƒ‰์ธ์„ ํ–ˆ์„ ๋•Œ๋Š” ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ ์ ˆ
    3. index : false๋กœ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ํ•„๋“œ๋Š” ๊ฒ€์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅ (๋””ํดํŠธ true)
    4. boost : ํ’€ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ์‹œ 1๋ณด๋‹ค ๋†’์œผ๋ฉด ํ•ด๋‹น ํ•„๋“œ ์Šค์ฝ”์–ด ์ ์ˆ˜์— ๊ฐ€์ค‘์น˜ ๋ถ€์—ฌ, 1๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด ๊ฐ€์ค‘์น˜ ๊ฐ์†Œ (๋””ํดํŠธ 1)
    5. fielddata : true๋กœ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ํ•„๋“œ์˜ ์ƒ‰์ธ๋œ ํ…€์„ ๊ฐ€์ง€๊ณ  ์ง‘๊ณ„(aggregation - kibana) ๋˜๋Š” ์ •๋ ฌ(sorting)์ด ๊ฐ€๋Šฅ (๋””ํดํŠธ false)

fielddata๋ฅผ true๋กœ ์„ค์ •์ด ๋˜๋ฉด ์ฟผ๋ฆฌ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๋งŽ์•„์ ธ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ โ†’ keywordํ•„๋“œ๋กœ ์‚ฌ์šฉ ๊ถŒ์žฅ

  • keyword : ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์˜ ํ† ํฐ์œผ๋กœ ์ €์žฅ, ์ง‘๊ณ„(aggregation) ๋˜๋Š” ์ •๋ ฌ(sorting)์— ์‚ฌ์šฉํ•  ๋ฌธ์ž์—ด ํ•„๋“œ๋ฅผ ์ง€์ •
์˜ต์…˜ ( index, boost ์˜ต์…˜์€ textํƒ€์ž…๊ณผ ๋™์ผ )
1. `doc_values` : `false`๋กœ ์„ค์ • ์‹œ ์ง‘๊ณ„์™€ ์ •๋ ฌ ์„ค์ • ์•ˆ๋จ (๋””ํดํŠธ `true`)
2. `ignore_above` : ์„ค์ •๋œ ๊ธธ์ด ์ด์ƒ์˜ ๋ฌธ์ž์—ด์€ ์ƒ‰์ธ์„ ํ•˜์ง€ ์•Š์•„ ๊ฒ€์ƒ‰์ด๋‚˜ ์ง‘๊ณ„ ๋ถˆ๊ฐ€๋Šฅ (๋””ํดํŠธ `2,147,483,647`)
3. `nomarlizer` : `keyword` ํƒ€์ž…์€ ์• ๋„๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋Œ€์‹  ์‚ฌ์šฉ โ†’ ํ† ํฌ๋‚˜์ด์ €๋Š” ์ ์šฉ์ด ์•ˆ๋˜๋ฉฐ, ์บ๋ฆญํ„ฐ ํ•„ํ„ฐ์™€ ํ† ํฐ ํ•„ํ„ฐ๋งŒ ์ ์šฉํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  1. ์ˆซ์ž
  • long : 64๋น„ํŠธ ์ •์ˆ˜
  • integer : 32๋น„ํŠธ ์ •์ˆ˜
  • short : 16๋น„ํŠธ ์ •์ˆ˜
  • byte : 8๋น„ํŠธ ์ •์ˆ˜
  • double : 64๋น„ํŠธ ์‹ค์ˆ˜
  • float : 32๋น„ํŠธ ์‹ค์ˆ˜
  • half_float : 16๋น„ํŠธ ์‹ค์ˆ˜
  • scaled_float : ์‹ค์ˆ˜ํ˜•์ด์ง€๋งŒ ๋ถ€๋™์†Œ์ˆ˜์ ์ด ์•„๋‹ˆ๋ผ long ํ˜•ํƒœ์ด๋ฉฐ ์˜ต์…˜์œผ๋กœ ์†Œ์ˆ˜์  ์œ„์น˜ ์ง€์ • โ†’ ํ†ตํ™” ๊ฐ™์ด ์†Œ์ˆ˜์  ์ž๋ฆฌ๊ฐ€ ๊ณ ์ •๋œ ๊ฐ’์ผ๋•Œ ์‚ฌ์šฉ
์˜ต์…˜ ( index, boost, doc_values ์˜ต์…˜์€ text, keywordํƒ€์ž…๊ณผ ๋™์ผ )
1. `coerce` : ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆซ์ž๋กœ ์ดํ•ด๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์€ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝ (๋””ํดํŠธ `true`)
2. `null_value` : ํ•„๋“œ๊ฐ’์ด ์ž…๋ ฅ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ `null`์ผ ๋•Œ ๋””ํดํŠธ ๊ฐ’ ์ง€์ •
3. `ignore_malformed` : `true`๋กœ ์„ค์ •ํ•˜๋ฉด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ๋“ค์–ด์™€๋„ ์ •์ƒ (๋””ํดํŠธ `false`) โ†’ ๊ฒ€์ƒ‰์ด๋‚˜ ์ง‘๊ณ„์—์„œ๋Š” ๋ฌด์‹œ
4. `scaling_factor` (`scaled_float` ํƒ€์ž…์—์„œ๋งŒ ์‚ฌ์šฉ) : ์†Œ์ˆ˜์  ๋ช‡ ์ž๋ฆฌ๊นŒ์ง€ ์ €์žฅํ• ์ง€ ์ง€์ •
  1. ๋‚ ์งœ
  • date : epoch_millis ํ˜•ํƒœ์˜ long๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๊ฐ€๋Šฅ
์˜ต์…˜ ( `index`, `null_value`, `ignore_malformed` ์˜ต์…˜์€ ๋‹ค๋ฅธ ํƒ€์ž…๊ณผ ๋™์ผ )
1. `format` : ์ž…๋ ฅ ๊ฐ€๋Šฅํ•œ ๋‚ ์งœ ํ˜•์‹์„ `||`๋กœ ๊ตฌ๋ถ„
  1. ๋ถˆ๋ฆฌ์–ธ - boolean
  • boolean
์˜ต์…˜ ( `index`, `doc_values` ์˜ต์…˜์€ ๋‹ค๋ฅธ ํƒ€์ž…๊ณผ ๋™์ผ )
1. `null_value` : ํ•„๋“œ๊ฐ’์ด ์ž…๋ ฅ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ `null`์ผ ๋•Œ ๋””ํดํŠธ ๊ฐ’ ์ง€์ •
  1. Object - ํ•œ ํ•„๋“œ ์•ˆ์— ํ•˜์œ„ ํ•„๋“œ๋ฅผ ๋„ฃ๋Š” object
  • object ํ•„๋“œ ์„ ์–ธ ํ•  ๋•Œ๋Š” properties๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ทธ ์•„๋ž˜์— ํ•˜์œ„ ํ•„๋“œ ์ด๋ฆ„๊ณผ ํƒ€์ž… ์ง€์ •
  • object ํ•„๋“œ๋ฅผ ์ฟผ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ ํ•˜๊ฑฐ๋‚˜ ์ง‘๊ณ„ ํ• ๋•Œ ${ํ•„๋“œ๋ช…}.${ํ•˜์œ„ํ•„๋“œ๋ช…}

๋ฐฐ์—ด(array) ํƒ€์ž…์˜ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š์Œ

  1. Nested - object ํƒ€์ž… ํ•„๋“œ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ object ๊ฐ’๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ ์—ญ ์ƒ‰์ธ ๊ตฌ์กฐ
  • nested
  1. Geo : ๋„ํ๋จผํŠธ ์ž…๋ ฅํ•˜๊ธฐ ์ „์— ์ธ๋ฑ์Šค ๋งคํ•‘ ์ •์˜ ํ•„์ˆ˜
  • geo_point : ์œ„๋„ ๊ฒฝ๋„ ๋‘๊ฐœ์˜ ๊ฐ’์„ ๊ฐ€์ง„ 1์ฐจ์› ๋ฐ์ดํ„ฐ ์ 
geo_bounding_box ์ฟผ๋ฆฌ ์˜ต์…˜ : ๋ฐ‘์˜ ๋‘ ์˜ต์…˜์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ๋„ค๋ชจ ์˜์—ญ ์•ˆ์— ์žˆ๋Š” ๋„ํ๋จผํŠธ๋ฅผ ๊ฐ€์ ธ์˜ด
1. `top_left`
2. `bottom_right`
geo_distance ์ฟผ๋ฆฌ ์˜ต์…˜ : ๋ฐ‘์˜ ์˜ต์…˜ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๋ฐ˜๊ฒฝ์˜ ์› ์•ˆ์— ์žˆ๋Š” ๋„ํ๋จผํŠธ๋ฅผ ๊ฐ€์ ธ์˜ด
1. `distance`
  • geo_shape : ์„ , ๋ฉด ๋“ฑ์˜ 2์ฐจ์› ๊ฐ’ โ†’ ๋„ํ๋จผํŠธ ์ž…๋ ฅ์‹œ ์ , ์„ , ๋‹ค์ค‘์ , ๋‹ค๊ฐํ˜• ๋“ฑ์„ type์— ๋ช…์‹œ
coordinates ๊ฐ’์— [๊ฒฝ๋„, ์œ„๋„] ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ์ž…๋ ฅ
๋„ํ๋จผํŠธ ์ž…๋ ฅ ์‹œ type
  1. point : ๋‹จ์ผ ์  (geo_point์™€ ๊ฐ™์€ ์šฉ๋„)
  2. multipoint : ์—ฌ๋Ÿฌ ์ ์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ €์žฅ, ์ ๋“ค์„ ๋ฐฐ์—ด๋กœ ์ž…๋ ฅ
  3. linestring : ์  2๊ฐœ ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ์ž…๋ ฅ, ์ง์„ ์„ ์ €์žฅ
  4. multilinestring : ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ง์„ ์„ ๋ฐฐ์—ด๋กœ ์ €์žฅ
  5. polygon : ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋Œ€๋กœ ์ ์„ ์ด์–ด ๋‹ค๊ฐํ˜• ์ง€์ • โ†’ ๋ฐฐ์—ด ๋งˆ์ง€๋ง‰ ๊ฐ’ = ๋ฐฐ์—ด ์ฒ˜์Œ ๊ฐ’
  6. multipolygon : ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋‹ค๊ฐํ˜•์„ ๋ฐฐ์—ด๋กœ ์ €์žฅ
  7. envelope : ์ขŒ์ธก ์ƒ๋‹จ ์ ๊ณผ ์šฐ์ธก ํ•˜๋‹จ ์  ๋‘๊ฐœ๋กœ ์ง์‚ฌ๊ฐํ˜•์„ ์ €์žฅ
geo_shape ์ฟผ๋ฆฌ ์˜ต์…˜ : shape์— ๊ฒ€์ƒ‰ํ•  ์˜์—ญ์˜ type, coordinates, relation ์œผ๋กœ ๊ฒ€์ƒ‰

relation

  • intersects : ์ฟผ๋ฆฌ ์˜์—ญ์— ์กฐ๊ธˆ์ด๋ผ๋„ ๊ฑธ์ณ์žˆ๋Š” ๋„ํ๋จผํŠธ ๊ฒฐ๊ณผ
  • within : ์ฟผ๋ฆฌ ์˜์—ญ์— ์™„์ „ํžˆ ํฌํ•จ๋˜์–ด์žˆ๋Š” ๋„ํ๋จผํŠธ ๊ฒฐ๊ณผ
  • disjoint : ์ฟผ๋ฆฌ ์˜์—ญ ๋ฐ”๊นฅ์— ์žˆ๋Š” ๋„ํ๋จผํŠธ ๊ฒฐ๊ณผ
  1. IP : IP ์ฃผ์†Œ ํ˜•์‹

    • ip
  2. ๋ฒ”์œ„ (Range) : ์ˆซ์ž๋‚˜ ๋‚ ์งœ, IP (gt, gte, lt, lte ๋กœ ๊ฐ’ ์ž…๋ ฅ)

  • integer_range
  • float_range
  • long_range
  • double_range
  • date_range
  • ip_range
  • range ์ฟผ๋ฆฌ ์˜ต์…˜

relation
within : ๋„ํ๋จผํŠธ ๋ฒ”์œ„ ๊ฐ’์ด ์ฟผ๋ฆฌํ•œ ๋ฒ”์œ„ ์•ˆ์— ์™„์ „ํžˆ ํฌํ•จ๋œ ๋„ํ๋จผํŠธ ๊ฒฐ๊ณผ
contains : within๊ณผ ๋ฐ˜๋Œ€๋กœ ์ฟผ๋ฆฌ ๋ฒ”์œ„๊ฐ€ ๋„ํ๋จผํŠธ ๋ฒ”์œ„ ์•ˆ์— ์™„์ „ํžˆ ํฌํ•จ๋˜๋Š” ๋„ํ๋จผํŠธ ๊ฒฐ๊ณผintersects : ๋„ํ๋จผํŠธ ๋ฒ”์œ„ ๊ฐ’๊ณผ ์ฟผ๋ฆฌ ๋ฒ”์œ„์— ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„์ด ์žˆ๋Š” ๋„ํ๋จผํŠธ ๊ฒฐ๊ณผ

  1. Binary : ์‹œ์Šคํ…œ ํŒŒ์ผ์ด๋‚˜ ์ด๋ฏธ์ง€ ์ •๋ณด ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’ ์ €์žฅ โ†’ ์ƒ‰์ธ์ด ๋˜์ง€ ์•Š์•„ ๊ฒ€์ƒ‰์ด๋‚˜ ์ง‘๊ณ„ ๋ถˆ๊ฐ€๋Šฅ
  • binary
  1. ๋ฉ€ํ‹ฐ ํ•„๋“œ (Multi Field) : ํ•˜๋‚˜์˜ ํ•„๋“œ๊ฐ’๋งŒ ์žˆ์ง€๋งŒ, ํ•„๋“œ์˜ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—ญ ์ƒ‰์ธ ํ•˜์—ฌ ์ €์žฅ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ

๐Ÿ’ก ์ง‘๊ณ„ (Aggregation)

ํ‚ค๋ฐ”๋‚˜ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‚ฌ์šฉ

  • aggregations๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ size๋ฅผ 0์œผ๋กœ ์„ธํŒ…ํ•˜๋ฉด ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง

์ข…๋ฅ˜

  1. metrics : ์ˆซ์ž ๋˜๋Š” ๋‚ ์งœ ํ•„๋“œ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‚ฐ
  • min
  • max
  • sum
  • avg
  • stats : ์œ„์˜ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค๊ณ  count๊นŒ์ง€ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ์˜ต์…˜
  • cardinality : ํ•„๋“œ์˜ ๊ฐ’์ด ๋ช‡ ์ข…๋ฅ˜์ธ์ง€ ๊ตฌํ•  ์ˆ˜ ์ž‡์Œ โ†’ textํ•„๋“œ์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜๋ฉฐ, ์ˆซ์ž ํ•„๋“œ๋‚˜ keyword, ip ํ•„๋“œ ๋“ฑ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • percentiles : ๊ฐ’๋“ค์„ ๋ฐฑ๋ถ„์œ„๋กœ ์ถœ๋ ฅ (๋””ํดํŠธ 1%, 5%, 25%, 50%, 75%, 95%, 99% ๊ตฌ๊ฐ„) โ†’ ๊ตฌ๊ฐ„ ์„ค์ • ์‹œ percents ์˜ต์…˜ ์‚ฌ์šฉ
  • percentile_ranks : ๋ฐ˜๋Œ€๋กœ ๊ฐ’์„ ์ž…๋ ฅํ•ด์„œ ๊ทธ ๊ฐ’์ด ์œ„์น˜ ํ•ด ์žˆ๋Š” ๋ฐฑ๋ถ„์œ„ ์ถœ๋ ฅ
  1. bucket : ๋ฒ”์œ„๋‚˜ keyword ๊ฐ’ ๋“ฑ์„ ๊ฐ€์ง€๊ณ  ๋„ํ๋จผํŠธ๋“ค์„ ๊ทธ๋ฃนํ™” values์— ๊ฐ’ ์ž…๋ ฅ
  • range : ์ˆซ์ž ํ•„๋“œ ๊ฐ’์œผ๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๊ณ , ๊ฐ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ฒ„ํ‚ท์„ ๋งŒ๋“ฌ

    1. field : ํ•„๋“œ๋ช…
    2. ranges : ๋ฐฐ์—ด๋กœ from, to ๊ฐ’ ์„ธํŒ…
  • histogram : range์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ˆซ์ž ํ•„๋“œ์˜ ๋ฒ”์œ„

    1. field : ํ•„๋“œ๋ช…
    2. interval : ๊ฐ„๊ฒฉ ํฌ๊ธฐ

date_range, date_histogram : ๋‚ ์งœ ํ•„๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฒ”์œ„ ์ง€์ •
calendar_interval ์˜ต์…˜ : day, month, week ๊ฐ„๊ฒฉ ์ง€์ • ๊ฐ€๋Šฅ
fixed_interval : ์ •ํ™•ํžˆ ๊ตฌ๋ถ„๋˜๋Š” ๋‚ ์งœ (์˜ˆ์‹œ : 30์ผ - 30d)

  • terms : keyword ํ•„๋“œ์˜ ๋ฌธ์ž์—ด ๋ณ„๋กœ ๊ทธ๋ฃนํ™”

ํ•˜์œ„(sub-aggregations) : bucket์œผ๋กœ ๋งŒ๋“  ๋‚ด๋ถ€์— bucket ๋˜๋Š” metrics ์ƒ์„ฑ ๊ฐ€๋Šฅ
-> depth๊ฐ€ ๊นŠ์–ด์งˆ ์ˆ˜๋ก ์ž‘์—…๋Ÿ‰๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๋Ÿ‰์ด ์ปค์ ธ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์˜ ๊ฐ€๋Šฅ์„ฑ

  1. pipeline : ๋‹ค๋ฅธmetrics aggregation์˜ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ์ž…๋ ฅ์œผ๋กœ ํ•˜๋Š” ๊ธฐ๋Šฅ
  • min_bucket

  • max_bucket

  • avg_bucket

  • sum_bucket

  • stats_bucket

  • moving_avg : ์ด๋™ ํ‰๊ท 

  • derivative : ๋ฏธ๋ถ„๊ฐ’

  • cumulative_sum : ๊ฐ’์˜ ๋ˆ„์  ํ•ฉ

    1. buckets_path : ์‚ฌ์šฉํ•  ๋ฒ„ํ‚ท ์ง€์ • โ†’ > ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง€์ • ๊ฐ€๋Šฅ (์˜ˆ : ๋ถ€๋ชจ๋ฒ„ํ‚ท>์ž๋…€๋ฒ„ํ‚ท)

๐Ÿ’ก ๊ฒฐ๊ณผ

ES ๊ฒ€์ƒ‰ RESPONSE ์šฉ์–ด

  • took : ์š”์ฒญ ์‹œ๊ฐ„ (mills)

  • timed_out : true ์ผ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ

  • _shards : ์š”์ฒญ๋œ ์ƒค๋“œ์˜ ๊ฐœ์ˆ˜

    • total : ์ƒค๋“œ์˜ ์ด ๊ฐœ์ˆ˜
    • successful : ์š”์ฒญ์ด ์„ฑ๊ณต๋œ ์ƒค๋“œ์˜ ์ˆ˜
    • skipped : ์š”์ฒญ์„ ๊ฑด๋„ˆ ๋›ด ์ƒค๋“œ์˜ ์ˆ˜
    • failed : ์š”์ฒญ์ด ์‹คํŒจํ•œ ์ƒค๋“œ์˜ ์ˆ˜
  • hits : ๋„ํ๋จผํŠธ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํฌํ•จ

    • total : ๋„ํ๋จผํŠธ์˜ ๊ฐœ์ˆ˜์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

      • value : ๋„ํ๋จผํŠธ ์ด ๊ฐœ์ˆ˜
      • relation : ๊ฐœ์ˆ˜์— ๋Œ€ํ•œ ๊ด€๊ณ„
        • eq : total.value์™€ ์ผ์น˜
        • gte : total.value๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ
    • max_score : _score์˜ ์ตœ๋Œ“๊ฐ’

    • hits : ๋„ํ๋จผํŠธ ์ง‘ํ•ฉ

      • _index : ์ธ๋ฑ์Šค ๋ช…
      • _id : ๋„ํ๋จผํŠธ ID
      • _score : ๊ฒ€์ƒ‰ ์ ์ˆ˜
      • _source : ๋„ํ๋จผํŠธ JSON

๊ธฐ๋Šฅ ์ •๋ฆฌ

๐Ÿ›  ์ธ๋ฑ์‹ฑ

ES ์ƒ‰์ธ ๊ด€๋ จ ๊ธฐ๋Šฅ

์• ๋„๋ผ์ด์ €

  • _analyze : ์• ๋„๋ผ์ด์ € API๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ„์„๋œ ๋ฌธ์žฅ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Œ
  • _termvectors : ํ…€ ๋ฐฑํ„ฐ API๋ฅผ ์ด์šฉํ•ด์„œ ์—ญ ์ธ๋ฑ์Šค ๋‚ด์šฉ ํ™•์ธ ๊ฐ€๋Šฅ
  • ์ธ๋ฑ์Šค์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์„ค์ •์€ ์• ๋„๋ผ์ด์ €๋งŒ ์ ์šฉ ๊ฐ€๋Šฅ โ†’ ์ œ๊ณต๋˜๋Š” ์• ๋„๋ผ์ด์ € ๋ณด๋‹ค๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์• ๋„๋ผ์ด์ €๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉ
  • standard : ๋งคํ•‘์— ์•„๋ฌด ์„ค์ •์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋””ํดํŠธ๋กœ ์ ์šฉ๋˜๋Š” ์• ๋„๋ผ์ด์ €

์บ๋ฆญํ„ฐ ํ•„ํ„ฐ

  • html_strip : HTML ํƒœ๊ทธ ๋ฐ ๋ฌธ๋ฒ• ์šฉ์–ด๋“ค์„ ์ œ๊ฑฐ

ํ† ํฌ๋‚˜์ด์ €

  • whitespace : ๊ณต๋ฐฑ๋งŒ์œผ๋กœ ๊ธฐ์ค€์œผ๋กœ ํ…€ ๋“ค์„ ๋ถ„๋ฆฌ
  • standard : ๊ณต๋ฐฑ์œผ๋กœ ํ…€์„ ๊ตฌ๋ถ„ํ•˜๋ฉด์„œ ํŠน์ˆ˜๋ฌธ์ž ์ œ๊ฑฐ
  • letter : ์•ŒํŒŒ๋ฒณ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ณต๋ฐฑ, ์ˆซ์ž, ๊ธฐํ˜ธ๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ํ…€์„ ๋ถ„๋ฆฌ
  • uax_url_email : ์ด๋ฉ”์ผ ์ฃผ์†Œ์™€ URL ๊ฒฝ๋กœ๋Š” ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ํ…€์œผ๋กœ ์ฒ˜๋ฆฌ
  • path_hierarchy : ๊ฒฝ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์ธต๋ณ„๋กœ ์ €์žฅํ•ด์„œ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์†ํ•œ ๋„ํ๋จผํŠธ๋ฅผ ์ˆ˜์ค€๋ณ„๋กœ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ

ํ† ํฐ ํ•„ํ„ฐ

  • lowercase : ๋Œ€๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ
  • stop : a, an, are, at, the โ€ฆ ๋ถˆ์šฉ์–ด๋กœ ๊ฐ„์ฃผ๋˜์–ด ๊ฒ€์ƒ‰์–ด ํ† ํฐ์—์„œ ์ œ์™ธ โ†’ ์–ธ์–ดํŒฉ์— ์žˆ๋Š” ๋ถˆ์šฉ์–ด ์ง€์ • ๊ฐ€๋Šฅ (ํ•œ์ค‘์ผ์€ ์•ˆ๋จ)
  • snowball : ~s, ~ing .. ์™€ ๊ฐ™์ด ๋ฌธ๋ฒ•์ƒ ๋ณ€ํ˜•๋œ ๋‹จ์–ด๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒ€์ƒ‰์— ์“ฐ์ด๋Š” ๊ธฐ๋ณธ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜
  • synonym : quick, fast ๋™์˜์–ด๋ฅผ ์ถ”๊ฐ€ ํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ
  • nGram : ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ๊ฒ€์ƒ‰์— ์‚ฌ์šฉ๋  ํ…€ ๋“ค์„ ๋ฏธ๋ฆฌ ๋ถ„๋ฆฌํ•ด์„œ ์—ญ ์ธ๋ฑ์Šค์— ์ €์žฅ โ†’ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ณด๋‹ค ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์— ์ ํ•ฉ
  • edgeNGram : ์•ž ์ชฝ์˜ nGram๋งŒ ์ €์žฅ
  • shingle : ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จ์–ด ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋œ ๋ฌถ์Œ (nGram์€ ๋ฌธ์ž ๋‹จ์œ„๋กœ ๋ฌถ์Œ)
  • unique : ์ค‘๋ณต๋˜๋Š” ํ…€ ๋“ค์„ ํ•˜๋‚˜๋งŒ ์ €์žฅ

๐Ÿ›  ๋„ํ๋จผํŠธ

ES ๋„ํ๋จผํŠธ ์ž…๋ ฅ ๊ธฐ๋Šฅ


๐Ÿ›  ๊ฒ€์ƒ‰

ES ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

  • ์‰ผํ‘œ๋กœ ๋‚˜์—ดํ•ด์„œ ์—ฌ๋Ÿฌ ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ *๋ฅผ ์ด์šฉํ•ด์„œ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ
  • ๋ฐ˜๋“œ์‹œ ํ•„๋“œ๋ช…์„ ํ†ตํ•ด ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด๋‹ค.
  • match ๊ฒ€์ƒ‰ ์‹œ, AND ์กฐ๊ฑด์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด operator ์˜ต์…˜ ์‚ฌ์šฉ
  • match_phrase ๊ฒ€์ƒ‰ ์‹œ, slop ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒ€์ƒ‰์–ด ์ค‘๊ฐ„์— ์„ค์ •ํ•œ slop ๊ฐ’์˜ ๊ฐœ์ˆ˜๋งŒํผ์˜ ๋‹ค๋ฅธ ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ
  • should๋Š” match_phrase์™€ ํ•จ๊ป˜ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋งจ ์ƒ์œ„์— ๋…ธ์ถœ
  • term ์ฟผ๋ฆฌ match์ฟผ๋ฆฌ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์• ๋„๋ผ์ด์ €๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฒ€์ƒ‰์–ด ๊ทธ๋Œ€๋กœ ์ผ์น˜ํ•˜๋Š” ํ…€์„ ๊ฒ€์ƒ‰
  • ${ํ•„๋“œ๋ช…}.keyword ๊ฒ€์ƒ‰ : ์Šค์ฝ”์–ด๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ •ํ™•๊ฐ’์˜ ์ผ์น˜ ์—ฌ๋ถ€๋งŒ์„ ํŒ๋‹จ โ†’ ์‚ฌ์šฉ์‹œ ์Šค์ฝ”์–ด์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์€ filter ๊ตฌ๋ฌธ์•ˆ์— ๋„ฃ์–ด์„œ ์‚ฌ์šฉ
  • ๋ฒ”์œ„ ์ฟผ๋ฆฌ (Range Query) : ์Šค์ฝ”์–ด๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ์•Š์•„ filter ๊ตฌ๋ฌธ์•ˆ์— ๋„ฃ์–ด์„œ ์‚ฌ์šฉ
  • ํ•˜์ด๋ผ์ดํŠธ ๋œ ์ฟผ๋ฆฌ ํƒœ๊ทธ ์„ค์ • ๊ฐ€๋Šฅ
  • ์‚ฌ์ด์ฆˆ (๋””ํดํŠธ๊ฐ’ : 10)
๋ฐ˜์‘ํ˜•