본문 바로가기
Data/ELK

[2021.05.25] 인턴 +85 elasticsearch Query DSL search in index(aggregation,복합쿼리 등)

by injekim97 2021. 5. 25.
반응형

[2021.05.25] 인턴 +85  elasticsearch Query DSL search in index (aggregation,복합쿼리 등)

 

 

이 게시글은, 데이터들을 인덱스(db로 따지면, 스키마 = 데이터베이스)를 만들어,

 

해당 인덱스에 "필드" 의 값을 가지고 있는지 검색하는 방법을 알려주기 위해 작성할 것이다.

e.g. index-name : lol_champion,  field: "attackspeed" (각각의 롤 챔피언들의 공격속도들을 검색)

 

 

 

----------------------------------------------------------------------------------------------------

logstash를 통하여, indexname: 210521_apache_3gb 데이터를 넣었다.(넣는과정은 다른 게시글에 작성됨)

 

 

<원하는 필드와 값을 검색하는 방법>

POST 210521_apache_3gb/_search/
{
    "query":{
        "match" : {
            "geoip.timezone" : "Asia/Tehran"
        }
    }
}

 

* "query" : { "match" : { "필드" : "검색할 값" } } 

 

-> took (검색된 갯수) : 1224개가 검색되었다.

 

 

<복합 쿼리 사용해서 검색>

bool -> AND 조건 (must) 으로 geoip.timezoneAsia/Tehran를 포함하면서,  geoip.city_name 필드에 Tehran를 검색

POST 210521_apache_3gb/_search/
{
    "query":{
     "bool": {
         "must" : [
             {
                 "match" : {
                     "geoip.timezone" : "Asia/Tehran"
                 }
             },
             {
                 "match" : {
                     "geoip.city_name": "Tehran"
                 }
             }
         ]
     }
  }
}

 

 

 

 

<elasticsearch Query DSL 애그리게이션(Aggregations)>

* 이미 인덱싱되어 있는 데이터에 대해서 검색 및 분석

 

* size : 0 

-> 실제로 검색 결과를 다 리턴받을 필요가 없기 때문에 분석 결과만 받도록 하기위함.

 

* aggs에서 country_name 필드에 대해서 Cardinality 분석을 실행
즉,  중복되지 않은 각각의 country_name개수를 세도록 하는 Aggregations

결과를 보면 10000개의 데이터에서 0개가 있다는 것을 알 수 있음

 

POST 210521_apache_3gb/_search/
{
    "size":0,
    "aggs" : {
        "total play" : {
            "cardinality" : {
                "field" : "country_name"
            }
        }
    }
}

 

 

<"GROUP BY"와 비슷한 기능인 Terms Aggregation>

 

 

POST 210521_apache_3gb/_search
{
    "size":0,
    "aggs" : {
        "Popular plays" : {
            "terms" : {
                "field" : "geoip.city_name.keyword"
            }
        }
    }
}




 

->  중복되는 값을 그룹지어, 몇개나 저장된지 알 수 있습니다.

 

 

 

 

<다중 애그리게이션 사용>

POST 210521_apache_3gb/_search
{
    "size":0,
    "aggs" : {
        "Popular plays" : {
            "terms" : {
                "field" : "geoip.city_name.keyword"
            },
            
             "aggs" : {
             "Per type" : {
                 "terms" : {
                     "field" : "_type"
                  }
             }
            }
        }
    }
}

 

 

 

 

 

반응형

댓글