[Elasticsearch] ๋ณตํ•ฉ ์ฟผ๋ฆฌ (Boolean)

[์›๋ณธ ๋งํฌ]

https://blog.naver.com/sssang97/222431994969
์ง€๋‚œ๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ๋‹จ์ผ ์กฐ๊ฑด์œผ๋กœ ๊ฒ€์ƒ‰์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ค„๋ดค์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํ•œ๊ฑฐ์ง€๋งŒ, ๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•œ ๊ฒ€์ƒ‰์„ ๊ตฌํ˜„ํ•  ์ˆ˜๋Š” ์—†๋‹ค.




bool ์ ˆ

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒ€์ƒ‰์กฐ๊ฑด์„ ํ•œ๋ฒˆ์— ๋ฌถ์–ด์ฃผ๋ ค๋ฉด AND๋‚˜ OR ๊ฐ™์€ ๋…ผ๋ฆฌ์‹์ด ํ•„์š”ํ•œ๋ฐ,
๊ทธ๋Ÿฐ๊ฑธ ๋ฌถ์–ด์ฃผ๋Š”๊ฒŒ ๋ฐ”๋กœ bool ์ ˆ์ด๋‹ค.
bool์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ๋“ค์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
must, should, must_not, filter๋‹ค.

POST products2/_search
{
  "query": {
    "bool": {
      "must": [], 
      "should": [],
      "must_not": [],
      "filter": []
    }
  }
}

ํ•˜๋‚˜์”ฉ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.




must ์ ˆ

must๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•Œ๋˜ AND ์ ˆ๊ณผ ๊ฑฐ์˜ ๋™๋“ฑํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.
must ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์กฐ๊ฑด๋“ค์ด ์ „๋ถ€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ ์ˆ˜๋ฅผ ๋ถ€์—ฌํ•ด์„œ ๊ฒฐ๊ณผ์— ๋…ธ์ถœํ•ด์ค€๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด shop_id๊ฐ€ 1์ด๊ณ  brand_id๊ฐ€ 1์ธ ํ•ญ๋ชฉ๋งŒ ๋…ธ์ถœ๋œ๋‹ค.




should ์ ˆ

์ด๊ฑด OR ์ ˆ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
์•ˆ์— ์žˆ๋Š” ์กฐ๊ฑด๋“ค ์ค‘์— ํ•˜๋‚˜๋งŒ ๋ถ€ํ•ฉํ•ด๋„ ์ ์ˆ˜๊ฐ€ ๋ถ€์—ฌ๋ผ์„œ ๋…ธ์ถœ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๊ฐœ์˜ ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋ฉด ๊ทธ๋งŒํผ ๋” ๋งŽ์€ ์ ์ˆ˜๋ฅผ ๋ฐ›๊ณ  ๋” ์œ„์— ๋…ธ์ถœ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ–ˆ์„ ๊ฒฝ์šฐ shop_id๊ณผ brand_id ๋‘˜์ค‘ ํ•˜๋‚˜๋งŒ ์ผ์น˜ํ•ด๋„ ๋‹ค ๋…ธ์ถœ๋˜์ง€๋งŒ, ๋‘˜๋‹ค ์ผ์น˜ํ•˜๋Š”๊ฒŒ ์ œ์ผ ์•ž์— ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.




must_not ์ ˆ

์ด๊ฑด must๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜์ „ํ•ด๋†“์€ ๊ธฐ๋Šฅ์ด๋‹ค.
์•ˆ์— ์žˆ๋Š” ์กฐ๊ฑด๋“ค์ด ์ „๋ถ€ ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ์—๋งŒ ์ ์ˆ˜๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

shop_id์™€ brand_id ๋‘˜๋‹ค ์•ˆ๋งž๋Š” "์‹œ๋‹ˆ์ปฌํ•œ ๋ถˆ๋‹ญ๋ณถ์Œ๋ฉด"์ด ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.




filter ์ ˆ

์œ„์—์„œ ๋‹ค๋ฃฌ ์กฐ๊ฑด์ ˆ๋“ค์€ ์ „๋ถ€ ํ•ด๋‹น ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•  ๊ฒฝ์šฐ '์ ์ˆ˜'๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.

์ ์ˆ˜๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ์ ์ˆ˜๊ฐ€ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ๋ฟ์ธ๋ฐ, ์ ์ˆ˜์™€ ๋ณ„๊ฐœ๋กœ ๊ทธ๋ƒฅ ํ›„๋ณด์—์„œ ์•„์˜ˆ ๊ฑธ๋Ÿฌ๋ฒ„๋ฆฌ๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๊ฑธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑด ์ ์ˆ˜๋ฅผ ๋”ฐ์ง€์ง€ ์•Š๊ณ  ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๊ฒƒ๋งŒ ์ „๋ถ€ ํ•„ํ„ฐ๋งํ•ด๋ฒ„๋ฆฐ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด must ๋“ฑ์„ ์“ด๋‹ค๋ฉด ์ ์ˆ˜๋ฅผ ์ €๋ ‡๊ฒŒ ๋ถ€์—ฌํ•œ ๋‹ค์Œ์— ๋ณด์—ฌ์ฃผ์ง€๋งŒ

ํ•„ํ„ฐ๋ฅผ ์“ด๋‹ค๋ฉด ์ ์ˆ˜๋ฅผ ์ฃผ์ง€ ์•Š์€ ์ฑ„๋กœ ๊ฑธ๋Ÿฌ๋ฒ„๋ฆฐ๋‹ค.

์ด๊ฑด ํŠนํžˆ๋‚˜ ๊ฒ€์ƒ‰์— ์ถ”๊ฐ€์กฐ๊ฑด์„ ์ฃผ๋ ์ฃผ๋  ๋งค๋‹ฌ ๊ฒƒ์ด ๋งŽ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

๊ฒ€์ƒ‰ ํ…์ŠคํŠธ๋กœ ์กฐ๊ฑด์„ ๊ฑฐ๋Š”๊ฑด ๋‹น์—ฐํžˆ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์ง€๋งŒ,
๋ง‰ 5000์› ์ดํ•˜, 500์› ์ด์ƒ. ์ด๋Ÿฐ ์‹์œผ๋กœ ์ถ”๊ฐ€์กฐ๊ฑด์„ ๊ฑฐ๋Š” ๊ฒƒ์„ ์ ์ˆ˜๋กœ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์กฐ์žก์Šค๋Ÿฌ์›Œ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿฐ๊ฑด ํ•„ํ„ฐ๋ฅผ ์“ฐ๋Š”๊ฒŒ ๊น”๋”ํ•˜๋‹ค.



์ฐธ์กฐ
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html