Bool query란?
여러개의 Query를 같이 쓰려면 Bool Query를 사용해야합니다.
Bool Query 안에 여러개의 Query를 넣으면 되는 것입니다.
RDBMS는 and, or 을 사용해서 복합 쿼리를 사용할 수 있다면
Elasticsearch 에서는 must, must not, should, filter를 사용할 수 있습니다.
- must : 쿼리가 참인 도큐먼트들을 검색합니다.
- must_not : 쿼리가 거짓인 도큐먼트들을 검색합니다.
- should : 검색 결과 중 이 쿼리에 해당하는 도큐먼트의 점수를 높입니다.
- filter : 쿼리가 참인 도큐먼트를 검색하지만 스코어를 계산하지 않습니다.
- must 보다 검색 속도가 빠르고 캐싱이 가능합니다.
Bool query 사용 예제
기본 사용법은 아래와 같습니다.
GET <인덱스명>/_search
{
"query": {
"bool": {
"must": [
{ <쿼리> }, …
],
"must_not": [
{ <쿼리> }, …
],
"should": [
{ <쿼리> }, …
],
"filter": [
{ <쿼리> }, …
]
}
}
}
must query 사용 예제
다음은 단어 "quick"과 구문 "lazy dog"가 포함된 모든 문서를 검색하는 쿼리입니다.
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {"message": "quick"}
},
{
"match_phrase": {"message": "lazy dog"}
}
]
}
}
}
must not query 사용 예제
다음은 단어 "quick" 그리고 구문 "lazy dog"가 하나도 포함되지 않은 문서를 검색합니다.
GET my_index/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {"message": "quick"}
},
{
"match_phrase": {"message": "lazy dog"}
}
]
}
}
}
Should query 사용 예제
should의 사용법을 살펴봅시다.
먼저 message가 fox인 데이터를 찾아봅시다.
4개의 결과를 return 받을 수 있습니다.
GET my_index/_search
{
"query" : {
"match" : {
"message" : "fox"
}
}
}
아래 should 명령어를 같이 사용해 봅시다.
lazy가 들어가 있는 데이터는 점수를 더 높게 설정해줘서 order를 변경해줄 수 있습니다.
GET my_index/_search
{
"query" : {
"bool" : {
"must" : [
{
"match" : {"message" : "fox"}
}
],
"should" : [
{
"match": {"message" : "lazy"}
}
]
}
}
}
'공부방 > Elasticsearch' 카테고리의 다른 글
범위 쿼리 (Range Query) (0) | 2023.05.10 |
---|---|
정확값 쿼리 (Exact Value Query) (0) | 2023.05.10 |
정확도 - Relevancy (Score 책정) (0) | 2023.05.10 |
검색과 쿼리 - Query DSL (domain specific language) (0) | 2023.05.10 |
CRUD - 입력, 조회, 수정, 삭제 (0) | 2023.05.10 |