Query Sample (2)
검색에서 사용되는 복합쿼리인
bool
에 대해 학습합니다.여러 쿼리를 조합하기 위해서는 상위에 bool 쿼리를 사용하고 그 안에 다른 쿼리를 넣어 복합 쿼리를 완성합니다.
학습 내용에 대한 출처 입니다.
01. Bool
- must : 쿼리가 True인 도큐먼트를 검색
- must_not : 쿼리가 False인 도큐먼트를 검색
- should : 검색 결과 중 이 should 에 매칭되는 도큐먼트들의 score 값을 높입니다.
- filter : 쿼리가 True인 도큐먼트를 검색하지만 스코어를 계산하지않고, must 보다 빠르고 캐싱이 가능
example
GET {index_name}/_search
{
"query": {
"bool": {
"must": [
{},
{}
],
"must_not": [
{},
{}
],
"should": [
{},
{}
],
"filter": [
{},
{}
]
}
}
}
bool
쿼리로 “잇츄” 와 “내츄럴발란스 울트라” 검색
GET {index_name}/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "잇츄"
}
},
{
"match_phrase": {
"message": "내츄럴발란스 울트라"
}
}
]
}
}
}
단어 “quick” 와 구문 “lazy dog” 가 하나도 포함되지 않은 문서 검색
GET my_index/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"message": "quick"
}
},
{
"match_phrase": {
"message": "lazy dog"
}
}
]
}
}
}
bool 쿼리를 이용해서 복합적인 검색기능을 구현할 수 있습니다.
특히 bool 쿼리는, 정확도(Relevancy) 와도 관계가 있기 때문에 알아둬야 합니다. bool 쿼리의 must, should 등을 표준 SQL의 AND, OR 등과 유사하지만 정확히 같지는 않습니다. bool 쿼리에는 SQL의 OR 와 정확히 일치하게 동작한다고 할 수 있는 연산자는 없어서 처음에는 이해하기가 조금 어렵습니다.
(A or B) and (not C)
에 대한 쿼리를 하려면 elasticSearch의 경우 다음처럼 A와 B의 OR 조건의 match 쿼리로 하여 must 안에 넣고 C를 must_not에 넣으면 됩니다.
댓글남기기