๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ์ตœ์ข…ํ”„๋กœ์ ํŠธ/๐Ÿ› ๏ธ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

[ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ] Elasticsearch keyword ํ•„๋“œ์˜ ์ค‘์š”์„ฑ (term ์ฟผ๋ฆฌ๊ฐ€ ์•ˆ๋  ๋•Œ)

by carrot0911 2025. 2. 25.

Elasticsearch์—์„œ term ์ฟผ๋ฆฌ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

 

๋ฌธ์ œ ์ƒํ™ฉ

์ฑ„์šฉ ๊ณต๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ Spring API์™€ Elasticsearch๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘, ์ž๊ฒฉ ์š”๊ฑด(requiredSkills)์„ term ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ํ•„ํ„ฐ๋งํ–ˆ๋”๋‹ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „ํ˜€ ์กฐํšŒ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.


๊ธฐ์กด ์ฟผ๋ฆฌ

// ์ž๊ฒฉ ์š”๊ฑด ํ•„ํ„ฐ๋ง
if (requestDto.getRequiredSkill() != null) {
    boolQueryBuilder.filter(f -> f
        .term(t -> t
            .field("requiredSkills")
            .value(requestDto.getRequiredSkill())
        )
    );
}

์›์ธ ๋ถ„์„

๋จผ์ € Elasticsearch์—์„œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•ด ๋ดค๋‹ค.

GET job-opening/_mapping

ํ™•์ธ ๊ฒฐ๊ณผ requiredSkills ํ•„๋“œ์˜ ๋งคํ•‘์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •๋˜์–ด ์žˆ์—ˆ๋‹ค.

"requiredSkills": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
  }
}

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ term ์ฟผ๋ฆฌ๋Š” ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— analyzer๊ฐ€ ์ ์šฉ๋˜๋Š” text ํƒ€์ž… ํ•„๋“œ์—์„œ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

  • text ํƒ€์ž…: analyzer๋ฅผ ํ†ตํ•ด ๋‹จ์–ด๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์ €์žฅ๋จ (์ •ํ™•ํ•œ ์ผ์น˜ ๊ฒ€์ƒ‰ ๋ถˆ๊ฐ€)
  • keyword ํƒ€์ž…: analyzer ์—†์ด ์ •ํ™•ํ•œ ํ‚ค์›Œ๋“œ ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ (์ •ํ™•ํ•œ ์ผ์น˜ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ)

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ •ํ™•ํ•œ ํ‚ค์›Œ๋“œ ๋งค์นญ์„ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ .keyword ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ˆ˜์ •ํ•œ ์ฟผ๋ฆฌ

// ์ž๊ฒฉ ์š”๊ฑด ํ•„ํ„ฐ๋ง
if (requestDto.getRequiredSkill() != null) {
    boolQueryBuilder.filter(f -> f
        .term(t -> t
            .field("requiredSkills.keyword")
            .value(requestDto.getRequiredSkill())
        )
    );
}

๊ฒฐ๊ณผ ํ™•์ธ

์ฟผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ–ˆ๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ฃผ์˜ํ•  ์ 

  • Elasticsearch์—์„œ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ํ‚ค์›Œ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋• ํ•ญ์ƒ keyword ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์ž.
  • term ์ฟผ๋ฆฌ๋Š” analyzer๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์€ ํ•„๋“œ(keyword)์—์„œ๋งŒ ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.