Elasticsearch์์ ์ธ๋ฑ์ค์ ํ๋์ ๊ฐ์ด ์กด์ฌํ๋์ง ์กฐํํ๊ธฐ ์ํ ์ฟผ๋ฆฌ๋ก exists๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ ์ธ๋ฑ์ค์ ๋งคํ ์ค์ ์ ๋ฐ๋ผ ์ ์์ ์ผ๋ก ์กฐํ๊ฐ ๋์ง ์์ ์ ์๋๋ฐ์, exists๋ก ํ๋์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์กฐํํ๊ธฐ ์ํด์๋ ๋งคํ์ index๊ฐ true๋ก ์ค์ ์ด ๋์ด์ผ ํฉ๋๋ค.
PUT /exists-tet
{
"mappings": {
"properties": {
"index_true": {
"type": "keyword",
"index": true,
"doc_values": false
},
"index_false": {
"type": "keyword",
"index": false,
"doc_values": false
}
}
}
}
index_true๋mappings์์ index๋ฅผ true๋ก ์ค์ ํ์๊ณ , index_false๋ false๋ก ์ค์ ํ์ต๋๋ค.
(index_true์์ index์ ๋งคํ ์ ๋ณด๊ฐ ๊ฒ์์ด ์๋๋๊ฑด ๋ํดํธ๊ฐ true์ฌ์ ๋ฐ๋ก ๋ณด์ฌ์ง์ง๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.)
POST /exists-tet/_doc
{
"index_true": "index_true1"
}
POST /exists-tet/_doc
{
"index_false": "index_false1"
}
POST /exists-tet/_doc
{
"index_false": "index_false2"
}
POST /exists-tet/_doc
{
"index_false": "index_false3"
}
POST /exists-tet/_doc
{
"index_true": "index_true2",
"index_false": "index_false4"
}
์ถ๊ฐ์ ์ผ๋ก index_true, index_false ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฑด ์ถ๊ฐํฉ๋๋ค.
GET /exists-tet/_search
{
"query": {
"exists": {
"field": "index_true"
}
}
}
์ ๋ฐ์ดํฐ๋ฅผ ํตํด index_true ๋ฅผ exists๋ก ์กฐํํด๋ณด๋ฉด, ํํธ ๋ฐ์ดํฐ๊ฐ 2๊ฑด์ผ๋ก ์ ์์ ์ผ๋ก ์กฐํ๊ฐ ๋๋ ๋ฐ๋ฉด์,
GET /exists-tet/_search
{
"query": {
"exists": {
"field": "index_false"
}
}
}
index_false ๋ฅผ exists๋ก ์กฐํํด๋ณด๋ฉด ์๋ฌด๋ฐ ๋ฐ์ดํฐ๊ฐ ์กฐํ๊ฐ ๋์ง ์์ต๋๋ค.
GET /exists-tet/_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "index_true"
}
}
}
}
}
์ถ๊ฐ์ ์ผ๋ก index_true๊ฐ ์กด์ฌํ์ง ์๋(must_not > exists) ํ๋๋ฅผ ์กฐํํ๋ ค๋ฉด ์ ์ฟผ๋ฆฌ๋ก ์ํํ ์ ์์ต๋๋ค.
์์ธ๋ ๋ฐ์ดํฐ์์ ํน์ ํ๋๊ฐ null์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ค๊ณ ํ ๋, exists ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ null์ด ์๋ ๋ฐ์ดํฐ๋ง ์กฐํํ๋ ค๊ณ ํ๋๋ ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์กฐํ๋์ง ์์ ์ฐพ์๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ผ๋ก, ํ๋ฆฐ ๋ด์ฉ์ด ์์ ์ ์์ต๋๋ค. ๐คฃ
๋๊ธ