Elastic Search

[Elastic Search] Query ์Šคํ„ฐ๋””-3ํŽธ ํ•„๋“œ ๊ฐ€์ค‘์น˜, ๋…ผ๋ฆฌ ์ฟผ๋ฆฌ, ํŒจํ„ด ๊ฒ€์ƒ‰

Tempo 2022. 2. 3. 20:17

ํ•„๋“œ์— ๊ฐ€์ค‘์น˜ ๋‘๊ธฐ

ํŠน์ • ํ•„๋“œ์— ๊ฐ€์ค‘์น˜๋ฅผ ๋‘๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ - ๋ถ€์ŠคํŒ… ๊ธฐ๋ฒ•. ์ฆ‰ ๊ฒ€์ƒ‰ํ•˜๋Š” ์—ฌ๋Ÿฌ ํ•„๋“œ ์ค‘ ์ค‘์š”ํ•œ ํ•„๋“œ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ํ•„๋“œ์— ๊ฐ€์ค‘์น˜๋ฅผ ๋‘์–ด ๋” ์ƒ์œ„๋กœ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

GET product/_search
{
  "query": {
    "multi_match": {
      "query": "๋งจํˆฌ๋งจ",
      "fields": [
        "category2",
        "title^2"
        ]
    }
  }
}

ํŠน์ • ํ•„๋“œ์— ๊ฐ€์ค‘์น˜๋ฅผ ์ค˜์„œ ํŠน์ • ํ•„๋“œ์˜ ์Šค์ฝ”์–ด ๊ฐ’์„ N๋ฐฐ ํ•ด์ฃผ๋Š” ํšจ๊ณผ๋ฅผ ์ค€๋‹ค. ์œ„ ์ฟผ๋ฆฌ์—์„œ๋Š” title ํ•„๋“œ์— 2๋ฐฐ์˜ ํšจ๊ณผ๋ฅผ ์ฃผ์—ˆ๋‹ค. ์ฆ‰ title ํ•„๋“œ์—์„œ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ ์Šค์ฝ”์–ด์— 2๋ฐฐ์˜ ํšจ๊ณผ๋ฅผ ์ฃผ์–ด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์œ„๋กœ ์˜ฌ๋ ธ๋‹ค.

๋…ผ๋ฆฌ ์ฟผ๋ฆฌ

๋…ผ๋ฆฌ ์ฟผ๋ฆฌ๋Š” ๋ณตํ•ฉ ์ฟผ๋ฆฌ๋กœ, match, multi_math, match_phrase ๋“ฑ์„ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Must ํƒ€์ž… - ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฐธ์ธ ๋„ํ๋จผํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋ณต์ˆ˜์˜ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด And ์˜ ํšจ๊ณผ

Must Not ํƒ€์ž… - ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ฑฐ์ง“์ธ ๋„ํ๋จผํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋‹ค๋ฅธ ํƒ€์ž…๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋„ํ๋จผํŠธ์—์„œ ์ œ์™ธํ•œ๋‹ค.

Should ํƒ€์ž… - ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉ ์‹œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฐธ์ธ ๋„ํ๋จผํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋ณต์ˆ˜์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด OR ์—ฐ์‚ฐ. ๋‹ค๋ฅธ ํƒ€์ž…๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์Šค์ฝ”์–ด์—๋งŒ ํ™œ์šฉ๋œ๋‹ค.

filter - ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ bool ํ˜•ํƒœ์˜ ํ•„ํ„ฐ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์œ„ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์กฐ๊ฑด

์—ฌ์„ฑ์˜ ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ๋Š”๋‹ค. โ€œ์˜ค๋ฒ„ํ•โ€ ๋˜๋Š” โ€œ๋งˆ์Œ(๋งˆ์Œ์— ๋“ค์–ด์š” ๋“ฑ)โ€์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ํฌํ•จ๋œ ๋ฆฌ๋ทฐ์ด๋ฉด์„œ โ€œ์—ฌ์ž์นœ๊ตฌโ€๋ผ๋Š” ๋‹จ์–ด๋Š” ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค(์—ฌ์ž์นœ๊ตฌ๊ฐ€ ์‚ฌ์คฌ์–ด์š”, ์—ฌ์ž์นœ๊ตฌ์—๊ฒŒ ์‚ฌ์คฌ์–ด์š” ๋“ฑ ๋‚จ์„ฑ์ด ์ž‘์„ฑํ•˜๋Š” ๋ฌธ๊ตฌ๋Š” ์ œ์™ธ). ๋˜ํ•œ ์„ฑ๋ณ„ ์˜ˆ์ธก๊ฐ’์—์„œ ์—ฌ์„ฑ ์„ฑ๋ณ„๊ฐ’์€ 2๋ฐฐ ๋ถ€์ŠคํŒ… ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ˆ์ธก ๊ฐ’์—์„œ ์—ฌ์„ฑ์˜ ๊ฐ’์ด 0.5 ์ด์ƒ(์—ฌ์„ฑ์ผ ํ™•๋ฅ ์ด 50%๊ฐ€ ๋„˜๋Š”)์ธ ๋ฆฌ๋ทฐ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.

GET review/_search
{
  "query": {
    "bool": {
// ์˜ค๋ฒ„ํ• ์ด๋ผ๋Š” ๋‹จ์–ด์™€ ๋งˆ์Œ์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.
      "must": [
        {"match": {"review": "์˜ค๋ฒ„ํ• ๋งˆ์Œ"}}
        ],
// ์—ฌ์ž์นœ๊ตฌ ๋ผ๋Š” ๋‹จ์–ด๋Š” ํฌํ•จ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
      "must_not": [
        {"match": {"review": "์—ฌ์ž์นœ๊ตฌ"}}
      ]
// gender ์˜ˆ์ธก ๊ฐ’์—์„œ ์—ฌ์„ฑ ๊ฐ’์— ๋ถ€์ŠคํŠธ๋ฅผ ์ ์šฉ
      , "should": [
        {
            "rank_feature": {"field": "genders.female", "boost": 2}
        }
      ],
// gender ์˜ˆ์ธก ๊ฐ’์—์„œ 0.5 ์ด์ƒ, ์ฆ‰ ์—ฌ์„ฑ์ด ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋ฆฌ๋ทฐ๋งŒ ํ•„ํ„ฐ๋ง
      "filter": {
        "range": {
          "gender.female": {
            "gte": 0.5
          }
        }
      }
    }
  }
}

ํŒจํ„ด ๊ฒ€์ƒ‰

์™€์ผ๋“œ์นด๋“œ ์ฟผ๋ฆฌ

์™€์ผ๋“œ์นด๋“œ ๊ฒ€์ƒ‰ ์‹œ์— โ€˜*โ€™ , โ€˜?โ€™ ๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€˜*โ€™ ๋Š” ๊ณต๋ฐฑ๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ๊ธ€์ž ์ˆ˜์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ๋งค์นญํ•  ์ˆ˜ ์žˆ๊ณ , โ€˜?โ€™๋Š” ์˜ค์ง ํ•œ ๋ฌธ์ž๋งŒ ๋งค์นญํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ์šฉ์–ด ๋งจ ์•ž์— โ€˜*โ€™, โ€˜?โ€™๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†๋„๊ฐ€ ๋งค์šฐ ๋Š๋ ค์ง„๋‹ค.

์ •๊ทœ์‹ ์ฟผ๋ฆฌ

์—˜๋ผ์Šคํ‹ฑ ์„œ์น˜ ์ฟผ๋ฆฌ์—์„œ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

GET review_pos/_search
{
  "query": {
    "regexp": {
      "review.nori_noun": "๋งจํˆฌ."
    }
  }
}
๐Ÿ”ฅ ํŒจํ„ด ๊ฒ€์ƒ‰์œผ๋กœ ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ์ฟผ๋ฆฌ๋ณด๋‹ค๋Š” ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ์€ ์–ด๋ ค์šธ ๋“ฏ ํ•˜๋‹ค.
๋ฐ˜์‘ํ˜•