(참고하면 좋을 블로그)
✏️ (1)편에서는 우리 팀에 프로젝트에서 사용한 쿼리문들을 서술하였다. 이번 (2)편에서는 어떤 내용들을 서술할 것이냐면 (1)편에 서술했던 쿼리들을 조합해서 복합적인 쿼리를 사용할 수 있는 bool 쿼리를 소개해 보겠다.
Bool 말 그대로 복합 쿼리를 의미한다. bool 쿼리에는 여러 옵션이 있다. 첫번째로는 must 옵션인데 이 옵션은 쿼리의 검색 값이 참인 document들을 검색한다. 이 쿼리와 같이 잘 사용된는 쿼리로는 must_not쿼리가 있는데 이 쿼리의 검색 단어가 특정 field안에 존재하지 않은 doument들을 검색한다. 말로 설명하기 보단 코드로 설명하는 것이 더욱 이해가 잘 되기 때문에 코드로 must와 must_not 쿼리를 알아 보도록 하자~
Request(must쿼리만 사용)
GET library/_search { "query": { "bool":{ "must": [ { "match": { "bookName": "개미" }
}
]
}
}
}
Response
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 5986,
"relation" : "eq"
},
"max_score" : 11.215282,
"hits" : [
{
"_index" : "library",
"_type" : "_doc",
"_id" : "LeVqhIMBbxEhYhgGVYWT",
"_score" : 11.215282,
"_source" : {
"_class" : "com.example.elasticsearchtest.domain.LibraryEs",
"bookName" : "공룡개미 개미공룡",
"authors" : "김성화;권수진 [공]글김규택 그림",
"classNum" : "457.279",
"isbn13" : "9788964963692",
"libraryName" : "강남구립역삼푸른솔도서관",
"publicationYear" : "2018",
"publisher" : "토토북",
"vol" : ""
}
},//.....[생략]
{
"_index" : "library",
"_type" : "_doc",
"_id" : "xDSghIMBbxEhYhgG9F1h",
"_score" : 11.215282,
"_source" : {
"_class" : "com.example.elasticsearchtest.domain.LibraryEs",
"bookName" : "개미의 습격:개미",
"authors" : "앤 제임스 글;앤터니 루이스 그림;조세희 옮김",
"classNum" : "408",
"isbn13" : "9788960160385",
"libraryName" : "강남구립대치도서관",
"publicationYear" : "2010",
"publisher" : "한국가우스",
"vol" : ""
}
},//.....[생략]
}
방금 코드의 설명처럼 “bookName” field안에 “개미”가 들어가있는 document들이 검색이 되는 것을 확인 할 수 있다. 그럼 must_not은 어떻게 동작하는지는 아래 코드를 보며 설명하겠다.
Request(must, must_not쿼리 모두 사용)