๐Ÿง  ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ์™€ Analyzer ๋น„๊ต

์ด ๋ฌธ์„œ๋Š” Elasticsearch์—์„œ์˜ ํ˜•ํƒœ์†Œ ๋ถ„์„ ๊ฐœ๋…๊ณผ
๋‹ค์–‘ํ•œ analyzer์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์‹ค์ „ ์˜ˆ์ œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


5. ๐Ÿง  ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ(morphological analyzer)๋Š” ๋ฌธ์žฅ์„ ์˜๋ฏธ ๋‹จ์œ„(ํ˜•ํƒœ์†Œ) ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • Elasticsearch์—์„œ๋Š” analyzer๋ฅผ ํ†ตํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

โš™๏ธ analyzer ๊ตฌ์„ฑ ์š”์†Œ

analyzer = tokenizer + filter
  • tokenizer: ๋ฌธ์žฅ์„ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ์ชผ๊ฐฌ (์˜ˆ: ๋‹จ์–ด ๊ธฐ์ค€, n-gram ๋“ฑ)
  • filter: ์†Œ๋ฌธ์ž ๋ณ€ํ™˜, ๋ถˆ์šฉ์–ด ์ œ๊ฑฐ ๋“ฑ ํ›„์ฒ˜๋ฆฌ ์ž‘์—… ์ˆ˜ํ–‰

๐Ÿ‡ฐ๐Ÿ‡ท nori: ํ•œ๊ธ€ ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ

  • Elasticsearch์—์„œ ์ œ๊ณตํ•˜๋Š” nori analyzer๋Š” ํ•œ๊ตญ์–ด์— ํŠนํ™”๋œ ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ์ž…๋‹ˆ๋‹ค.
  • ๋„์–ด์“ฐ๊ธฐ๋งŒ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด ์–ด๋ฏธ, ์กฐ์‚ฌ, ์ ‘๋‘์–ด, ๋ณตํ•ฉ์–ด ๋“ฑ์„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ์˜ˆ: "์‚ผ์„ฑ์ „์ž์˜ ์ฃผ๊ฐ€๋Š”" โ†’ ์‚ผ์„ฑ์ „์ž, ์˜, ์ฃผ๊ฐ€, ๋Š”

6. ๐Ÿ”ฌ ๋‹ค์–‘ํ•œ analyzer ๋น„๊ต

ํ…Œ์ŠคํŠธ ๋ฌธ์žฅ

์‚ผ์„ฑ์ „์ž์˜ ์ฃผ๊ฐ€๋Š” 7๋งŒ ์›์ด๋‹ค.

1๏ธโƒฃ standard analyzer (๊ธฐ๋ณธ)

POST http://localhost:9200/_analyze
{
  "analyzer": "standard",
  "text": "์‚ผ์„ฑ์ „์ž์˜ ์ฃผ๊ฐ€๋Š” 7๋งŒ ์›์ด๋‹ค."
}

๐Ÿ“Œ ๊ฒฐ๊ณผ ์˜ˆ์‹œ:

์‚ผ์„ฑ์ „์ž์˜
์ฃผ๊ฐ€๋Š”
7๋งŒ
์›์ด๋‹ค
  • ๋„์–ด์“ฐ๊ธฐ ๊ธฐ์ค€ ๋ถ„ํ• , ์กฐ์‚ฌ/์–ด๋ฏธ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€

2๏ธโƒฃ whitespace analyzer

POST http://localhost:9200/_analyze
{
  "analyzer": "whitespace",
  "text": "์‚ผ์„ฑ์ „์ž์˜ ์ฃผ๊ฐ€๋Š” 7๋งŒ ์›์ด๋‹ค."
}

๐Ÿ“Œ ๊ฒฐ๊ณผ ์˜ˆ์‹œ:

์‚ผ์„ฑ์ „์ž์˜
์ฃผ๊ฐ€๋Š”
7๋งŒ
์›์ด๋‹ค.
  • ๊ณต๋ฐฑ๋งŒ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌ, ๋ฌธ์žฅ ๋ถ€ํ˜ธ ํฌํ•จ๋จ

3๏ธโƒฃ nori analyzer (ํ•œ๊ธ€ ์ „์šฉ)

POST http://localhost:9200/_analyze
{
  "analyzer": "nori",
  "text": "์‚ผ์„ฑ์ „์ž์˜ ์ฃผ๊ฐ€๋Š” 7๋งŒ ์›์ด๋‹ค."
}

๐Ÿ“Œ ๊ฒฐ๊ณผ ์˜ˆ์‹œ:

์‚ผ์„ฑ์ „์ž
์˜
์ฃผ๊ฐ€
๋Š”
7
๋งŒ
์›
์ด๋‹ค
  • ์กฐ์‚ฌ(์˜, ๋Š”)๊นŒ์ง€ ๋ถ„๋ฆฌ
  • ์ˆซ์ž ๋ฐ ๋ณตํ•ฉ์–ด๋„ ์ •ํ™•ํžˆ ๋ถ„ํ•ด

โœ… nori analyzer๊ฐ€ ํ•œ๊ตญ์–ด์— ์ ํ•ฉํ•œ ์ด์œ 

๊ธฐ๋Šฅ์„ค๋ช…
ํ˜•ํƒœ์†Œ ๋‹จ์œ„ ๋ถ„๋ฆฌ์กฐ์‚ฌ, ์–ด๋ฏธ, ์ ‘์‚ฌ ๋“ฑ์„ ์ •ํ™•ํžˆ ๊ตฌ๋ถ„
์‚ฌ์šฉ์ž ์‚ฌ์ „ ์ง€์›์‚ฌ์šฉ์ž ์ •์˜ ๋‹จ์–ด ๋“ฑ๋ก ๊ฐ€๋Šฅ (nori_user_dict.txt)
๋ณตํ•ฉ์–ด ์ฒ˜๋ฆฌ“๋Œ€ํ•œ๋ฏผ๊ตญ์ •๋ถ€” โ†’ “๋Œ€ํ•œ๋ฏผ๊ตญ”, “์ •๋ถ€” ์ฒ˜๋Ÿผ ์˜๋ฏธ ๋‹จ์œ„ ๋ถ„ํ•ด ๊ฐ€๋Šฅ
๋ถˆ์šฉ์–ด(stopword) ์„ค์ •์˜๋ฏธ ์—†๋Š” ๋‹จ์–ด ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅ (๋Š”, ์ด, ๊ฐ€ ๋“ฑ)

๐Ÿ”š ์ •๋ฆฌ

analyzer์„ค๋ช…ํ•œ๊ตญ์–ด ์ ํ•ฉ์„ฑ
standard๋„์–ด์“ฐ๊ธฐ ๊ธฐ๋ฐ˜ ๊ธฐ๋ณธ ๋ถ„์„๊ธฐโŒ
whitespace๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ๋งŒ ๋ถ„๋ฆฌโŒ
noriํ˜•ํƒœ์†Œ ๊ธฐ๋ฐ˜ ํ•œ๊ธ€ ์ „์šฉ ๋ถ„์„๊ธฐโœ