ElasticSearch - inculde

 

회사 프로젝트에서 작업할 때 무심코

ES에서 Query를 사용할 때 무심코 모든 데이터를 다가져와서 사용했었는데

조회하는 데이터 사이즈가 상당히 큰 사이즈라서 성능이슈를 발생시킬 수 있다는 피드백을 받았다.

 

아래는 성능이슈를 발생시킬 수 있던 쿼리이다.

GET camo_al_was_acc_log/_search
{
  "from": 0,
  "size": 10000,
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "str_time_ui": {
              "from": "2022-09-22 14:28:31",
              "to": "2022-09-22 23:59:47",
              "include_lower": true,
              "include_upper": true,
              "format": "yyyy-MM-dd HH:mm:ss",
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "explain": false,
  "sort": [
    {
      "str_time_ui": {
        "order": "asc"
      }
    }
  ],
  "track_total_hits": 2147483647
}

 

해당 camo_al_was_acc_log 라는 인덱스에는 수많은 type들이 존재하는데 저렇게 쿼리를 날리면

그 수많은 모든 type 들을 다가져오게 되버린다. 

당연히 응답속도도 느리다.

위 쿼리의 응답속도

 

GET camo_al_was_acc_log/_search
{
  "from": 0,
  "size": 10000,
  "_source": {

        "includes": [ "str_time_ui", "src_ip" ]

    },
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "str_time_ui": {
              "from": "2022-09-22 14:28:31",
              "to": "2022-09-22 23:59:47",
              "include_lower": true,
              "include_upper": true,
              "format": "yyyy-MM-dd HH:mm:ss",
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "explain": false,
  "sort": [
    {
      "str_time_ui": {
        "order": "asc"
      }
    }
  ],
  "track_total_hits": 2147483647
}

 

includes를 사용한 쿼리의 응답속도

하지만 includes에 원하는 type만 적어주면

위의 예시에서는 딱 2개의 type들의 데이터만 가져오기 때문에 응답속도도 훨씬 빠르다.