ELK 스택/Elasticsearch

[Elasticsearh] 실전에서 사용 되는 요청 쿼리 작성

new_challenge 2020. 5. 9. 22:43
반응형

엘라스틱 서치에서 사용되는 다양한

쿼리문에 관한 포스팅입니다:)

 

 

 

모든 문서 검색

GET [INDEX_NAME]/_search
{
	"query": {
		"match_all" : {}
	}
}

 

 

문서의 갯수 검색

GET [INDEX_NAME]/_count
{
	"query": {
		"match_all" : {}
	}
}

 

 

조건 검색

특정 필드에 특정 값을 만족 하는 경우

GET [INDEX_NAME]/_count
{
  "query": {
    "match": {
      "[필드명]": "[값]"
    }
  }
}

 

특정 필드의 값 조건 + 날짜 지정 범위

GET [INDEX_NAME]/_search
{
  "size": 0, #출력결과 숨길때
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "[필드명]": "[값]"
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "now-7d/d",
              "lt": "now"
            }
          }
        }
      ]
    }
  }
}

 

 

다중 조건 검색

GET [INDEX_NAME]/_count
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "[필드명1]": "[값1]"
          }
        },
        {
          "match": {
            "[필드명2]": "[값2]"
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "now-7d/d",
              "lt": "now"
            }
          }
        }
      ]
    }
  }
}

 

집계쿼리

특정 필드에 대한 Group by 집계

GET [INDEX_NAME]/_search
{
  "size":0, # 집계결과만 나오도록 
  "aggs":{
    "count":{
      "terms": {
        "field": "[필드명]",
        "size": 6 # 집계 결과 원하는 개수 지정
      }
    }
  }
}

 

>> 출력 화면 : Group by로 출력되어 해당되는 doc_count의 수가 내림차순으로 정렬

 

 

조건을 추가하고, 그 결과에 대한 Group by 결과 집계

GET [INDEX_NAME]/_search
{
  "size":0,
  "query": {
    "match": {
      "[조건 필드명]": "[값]"
    }
  }, 
  "aggs":{
    "count":{
      "terms": {
        "field": "[Group By를 설정 할 필드명]",
        "size": 6
      }
    }
  }
}

 

>> 출력 결과 : 조건에 해당하는 결과에 대한 집계가 이루어진다.

 

 

응용 : 조건과 시간 범위를 추가하여 검색한 뒤, Group by 집계

GET [INDEX_NAME]/_search
{
  "size":0,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "[조건 필드명]": "[값]"
          }
        },
        {
          "range": {
            "@timestamp": {
              "time_zone": "-09:00",
              "gte": "now-1d/d",
              "lt": "now"
            }
          }
        }
      ]
    }
  }, 
  "aggs":{
    "count":{
      "terms": {
        "field": "[Groupby 필드명]",
        "size": 6
      }
    }
  }
}

 

>> 날짜 범위 조건이 제대로 작동하는지 확인하기 위해 날짜 기준을 변경해본다. 

>> 출력 화면 : 날짜를 변경 할 때마다 출력의 doc_count가 달라진다

 

반응형