반응형
query_string 쿼리는 여러 조건을 조합하기에는 용이한 문법이지만 옵션이 한정되어 있다.
여러 쿼리를 조합하기 위해서는 상위에 bool 쿼리를 사용하고 그 안에 다른 쿼리들을 넣는 식으로 사용 가능하다.
bool 쿼리는 4개의 인자를 가지고 있고, 그 인자 안에 다른 쿼리들을 배열로 넣는 방식으로 동작한다.
- must : 쿼리가 참인 도큐먼트들을 검색
- must_not : 쿼리가 거짓인 도큐먼트들을 검색
- should : 검색 결과 중 이 쿼리에 해당하는 도큐먼트의 점수를 높인다
- filter : 쿼리가 참인 도큐먼트를 검색하지만 스코어를 계산하지 않는다. must 보다 검색 속도가 빠르고 캐싱이 가능.
GET <인덱스명>/_search
{
"query": {
"bool": {
"must": [
{ <쿼리> }, …
],
"must_not": [
{ <쿼리> }, …
],
"should": [
{ <쿼리> }, …
],
"filter": [
{ <쿼리> }, …
]
}
}
}
and 조건으로 검색하려면
must 배열안에 여러개의 조건을 추가해야 한다.
예를 들어 match 해당 기간동안 logDate의 로그에 어떤 text 를 가진 데이터 조회를 할 경우
GET 인덱스/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"text": "텍스트"
}
},
{
"range": {
"logDate": {
"gte": "2021-06-29 11:00:00.000",
"lte": "2021-06-29 12:00:00.000",
"format": "yyyy-MM-dd HH:mm:ss.SSS",
"time_zone": "+09:00"
}
}
}
]
}
}
}
or 조건으로 검색하려면 must : [{match :"A B"}] 와 같이 검색하자.
참고문헌
> https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html [bool 쿼리 공식문서]
> https://esbook.kimjmin.net/05-search/5.2-bool [블로그 Elastic 가이드북]
반응형
'DB > Elasticsearch' 카테고리의 다른 글
[ELK] logstash filter grok 사용 (0) | 2022.12.18 |
---|