반응형

공통

인덱스 목록 조회

GET /_cat/indices?s=index

조회

전체 조회

SELECT * FROM test_index
GET /test_index/_search
{
  "query" : {
        "match_all": {}
    }
}

데이터 수 조회

SELECT COUNT(*) FROM test_index
GET /test_index/_count
{
  "query" : {
        "match_all": {}
    }
}

LIKE 조건 조회

SELECT *
FROM test_index
WHERE url LIKE '%/api/%'
GET /test_index/_search HTTP/1.1
Content-Type: application/json

{
    "query": {
        "query_string": {
            "fields": [
                "url"
            ],
            "query": "*/api/*"
        }
    }
}

AND 조건 조회

SELECT *
FROM test_index
WHERE response_code = 200
AND (response_time >= 5 AND response_time < 10)
GET /test_index/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "response_code": 200
                    }
                },
                {
                    "range": {
                        "response_time": {
                            "gte": 5,
                            "lt": 10
                        }
                    }
                }
            ]
        }
    }
}

NOT AND 조건 조회

SELECT *
FROM test_index
WHERE NOT response_code = 200
AND NOT (response_time >= 5 AND response_time < 10)
GET /test_index/_search
{
    "query": {
        "bool": {
            "must_not": [
                {
                    "match": {
                        "response_code": 200
                    }
                },
                {
                    "range": {
                        "response_time": {
                            "gte": 5,
                            "lt": 10
                        }
                    }
                }
            ]
        }
    }
}

데이터 N개만 조회

SELECT * FROM test_index LIMIT 10
GET /test_index/_search
{
    "size": 10
}

특정 필드만 조회

SELECT response_code, response_time FROM test_index
GET /test_index/_search
{
    "_source": ["response_code", "response_time"]
}

스크립트 처리된 필드 조회

SELECT CONCAT(method, ' ', url) as full_url FROM test_index
GET /test_index/_search
{
    "script_fields": {
        "full_url": {
            "script": {
                "source": "params._source.method + ' ' + params._source.url"
            }
        }
    }
}

집계 조회

SELECT url, COUNT(*) as count
FROM test_index
GROUP BY url
ORDER BY count DESC
LIMIT 5
GET /test_index/_search
{
    "size": 0,
    "aggregations": {
        "request_counts_per_url": {
            "terms": {
                "field": "url.keyword",
                "size": 5,
                "order": {
                    "_count": "desc"
                }
            }
        }
    }
}

스크립트 처리된 필드 집계 조회

SELECT full_url, COUNT(*) as count
FROM (
	SELECT CONCAT(method, ' ', url) AS full_url
	FROM test_index
)
GROUP BY full_url
ORDER BY count DESC
LIMIT 5
GET /test_index/_search
{
    "size": 0,
    "aggregations": {
        "request_counts_per_url": {
            "terms": {
                "script": "params._source.method + ' ' + params._source.url",
                "size": 5,
                "order": {
                    "_count": "desc"
                }
            }
        }
    }
}

매핑 정보 변경하기 - reindex

설명

  • 한 번 생성된 인덱스 매핑은 변경이 불가능함
  • 변경될 매핑 정보를 갖는 인덱스를 추가로 만들고 reindex하는 방식으로 처리
  • 따라서 처음 인덱스 생성시 매핑 정보 설계를 신중히해야함

인덱스 생성

PUT /test_index HTTP/1.1
Content-Type: application/json

{
    "mappings": {
        "properties": {
            "response_code": {
                "type": "integer"
            }
        }
    }
}

데이터 추가

POST /test_index/_doc HTTP/1.1
Content-Type: application/json

{
    "response_code": 200
}

변경할 매핑 정보를 갖는 새 인덱스 추가

PUT /test_index_dump HTTP/1.1
Content-Type: application/json

{
    "mappings": {
        "properties": {
            "response_code": {
                "type": "text"
            }
        }
    }
}

reindex

POST /_reindex HTTP/1.1
Content-Type: application/json

{
    "source": {
        "index": "test_index"
    },
    "dest": {
        "index": "test_index_dump"
    }
}

참고

date type 다루기

인덱스 생성

PUT /test_index HTTP/1.1
Content-Type: application/json

{
    "mappings": {
        "properties": {
            "access_time": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss"
            }
        }
    }
}

데이터 추가

POST /test_index/_doc HTTP/1.1
Content-Type: application/json

{
    "access_time": "2020-02-15 11:00:00"
}
POST /test_index/_doc HTTP/1.1
Content-Type: application/json

{
    "access_time": "2020-12-31 11:00:00"
}

데이터 조회

GET /test_index/_search HTTP/1.1
Content-Type: application/json

{
    "query": {
        "range": {
            "access_time": {
                "gte": "2020-12-31 11:00:00"
            }
        }
    }
}
{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "test_index",
                "_type": "_doc",
                "_id": "2",
                "_score": 1.0,
                "_source": {
                    "access_time": "2020-12-31 11:00:00"
                }
            }
        ]
    }
}

object type 다루기

인덱스 생성

PUT /test_index HTTP/1.1
Content-Type: application/json

{
    "mappings": {
        "properties": {
            "headers": {
                "type": "object"
            }
        }
    }
}

데이터 추가

POST /test_index/_doc HTTP/1.1
Content-Type: application/json

{
    "headers": {
        "referer": "localhost",
        "cookie": "token=aaaaaa; fff=zzzz"
    }
}
POST /test_index/_doc HTTP/1.1
Content-Type: application/json

{
    "headers": {
        "referer": "0.0.0.0"
    }
}

데이터 조회

GET /test_index/_search HTTP/1.1
Content-Type: application/json

{
    "query": {
        "match": {
            "headers.referer": "localhost"
        }
    }
}
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 0.6931471,
        "hits": [
            {
                "_index": "test_index",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.6931471,
                "_source": {
                    "headers": {
                        "referer": "localhost",
                        "cookie": "token=aaaaaa; fff=zzzz"
                    }
                }
            }
        ]
    }
}
반응형

'Development > ELK' 카테고리의 다른 글

[Metricbeat] 설치  (1) 2020.12.28
[Elastalert] 설치  (0) 2020.12.28
[Elasticsearch] 설정  (0) 2019.03.17
[Filebeat] 설정  (0) 2019.03.02
[Filebeat] 설치  (1) 2019.03.01

+ Recent posts