본문 바로가기
infra/ELK

[ELK] Elasticsearch의 데이터 검색

by hjhello423 2020. 1. 19.

Elasticsearch의 검색 엔진을 이용하여 데이터를 CURL 하는 다양한 방법에 대해 정리해 보겠습니다.

 

ES에 생성되어 있는 모든 index를 출력해 보겠습니다.

curl -XGET 'localhost:9200/_cat/indices?pretty&v'
health status index                    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   logstash                 961W116OTqeuihFKVsbfVw   1   1         51            0    122.5kb        122.5kb
green  open   .kibana_task_manager_1   3_qkg0zPQoKZ-Q_vT9HPDQ   1   0          2            0     32.6kb         32.6kb
green  open   .apm-agent-configuration KVDr8cy2Th6xm8y5nWH5Kw   1   0          0            0       283b           283b
green  open   .kibana_1                7NwZy05jTNCinTw3TxaTeA   1   0       1062           62    536.1kb        536.1kb

green, yellow의 상태에 대해서는 링크를 참조해 보시길 바랍니다.

 


INDEX 생성

우선 간단하게 테스트용 index를 생성해 보도록 하겠습니다.

index의 이름은 test10으로 만들어 보겠습니다.

[root@localhost itsme]# curl -XPUT localhost:9200/test10?pretty
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "test10"
}

[root@localhost itsme]# curl -XGET localhost:9200/_cat/indices?pretty
yellow open logstash                 961W116OTqeuihFKVsbfVw 1 1   51  0 122.5kb 122.5kb
green  open .kibana_task_manager_1   3_qkg0zPQoKZ-Q_vT9HPDQ 1 0    2  0  32.6kb  32.6kb
yellow open test10                   GftKkuJzRF6A49qT_8w9iw 1 1    0  0    230b    230b
green  open .apm-agent-configuration KVDr8cy2Th6xm8y5nWH5Kw 1 0    0  0    283b    283b
green  open .kibana_1                7NwZy05jTNCinTw3TxaTeA 1 0 1062 62 536.1kb 536.1kb

PUT 메서드를 이용해서 test10 index를 생성해 보았습니다.

모든 index를 출력해보면 test10이 생성된 것을 확인할 수 있습니다.


Document 추가

이번에는 생성한 index에 document를 추가해 보도록 하겠습니다.

document를 추가할 때는 POST 메서드를 사용하고 데이터를 body에 담아서 전달하게 됩니다.

curl의 -d옵션을 이용해서 데이터를 추가하면 됩니다.

헤더에는 json타입임을 명시하면 됩니다.

curl -XPOST localhost:9200/test10/info/1?pretty -d'{"name":"apple"}' -H 'Content-Type: application/json'
{
  "_index" : "test10",
  "_type" : "info",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}



curl -XPOST 'localhost:9200/test10/info/2/?pretty' -d '{"name":"kiwi", "color":"green"}' -H 'Content-Type: application/json'
{
  "_index" : "test10",
  "_type" : "info",
  "_id" : "2",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

test10 index의 info type에 id:1로 데이터가 생성된 것을 확인할 수 있습니다.

아래와 같이 id값을 지정하지 않으면 임의의 문자열로 id값을 자동으로 할당합니다.

curl -XPOST localhost:9200/test10/info/?pretty -d'{"name":"banana"}' -H 'Content-Type: application/json'
{
  "_index" : "test10",
  "_type" : "info",
  "_id" : "BO4_vW8B8vrcA1Y8ZBCd",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

id값에 'BO4_vW8B8vrcA1Y8ZBCd' 값이 자동으로 할당된 것을 확인할 수 있습니다.

 


Document 조회

이번에는 위에서 추가한 document를 조회해 보도록 하겠습니다.

먼저 모든 index의 document를 조회해 보도록 하겠습니다.

기존의 등록된 데이터의 양이 있어 조회 결과는 생략하겠습니다.

curl -XGET localhost:9200/_all/_search?pretty

 

이번엔 test10 index의 모든 document를 조회해 보도록 하겠습니다.

위에서 등록한 apple, banana를 찾을 수 있습니다.

curl -XGET localhost:9200/test10/_search?pretty
{
  "took" : 295,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test10",
        "_type" : "info",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "apple"
        }
      },
      {
        "_index" : "test10",
        "_type" : "info",
        "_id" : "BO4_vW8B8vrcA1Y8ZBCd",
        "_score" : 1.0,
        "_source" : {
          "name" : "banana"
        }
      },
      {
        "_index" : "test10",
        "_type" : "info",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "kiwi",
          "color" : "green"
        }
      }
    ]
  }
}

 

이번엔 id를 이용하여 조회해 보겠습니다.

banana를 등록할 때 임의로 생선 된 id인 'BO4_vW8B8vrcA1Y8ZBCd'를 이용하여 조회하도록 해보겠습니다.

_source 프로버티에 등록한 데이터가 있습니다.

curl -XGET localhost:9200/test10/info/BO4_vW8B8vrcA1Y8ZBCd?pretty
{
  "_index" : "test10",
  "_type" : "info",
  "_id" : "BO4_vW8B8vrcA1Y8ZBCd",
  "_version" : 1,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "banana"
  }
}

 

위에 방식으로 조회하면 불필요한 항목까지 조회가 됩니다.

filter_path를 이용하여 필요로 하는 _source의 값만 조회해보도록 하겠습니다.

curl -XGET 'localhost:9200/test10/info/2?pretty&filter_path=_source'
{
  "_source" : {
    "name" : "kiwi",
    "color" : "green"
  }
}



curl -XGET 'localhost:9200/test10/info/2?pretty&filter_path=_source.color'
{
  "_source" : {
    "color" : "green"
  }
}

 


Document 수정

등록 조회를 해보았으니 이번엔 document를 수정해 보겠습니다.

수정은 PUT 메서드를 이용합니다.

curl -XPUT 'localhost:9200/test10/info/1?pretty' -d '{"name":"apple","color":"red"}' -H 'Content-Type:application/json'
{
  "_index" : "test10",
  "_type" : "info",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

curl -XGET 'localhost:9200/test10/info/1?pretty'
{
  "_index" : "test10",
  "_type" : "info",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 3,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "apple",
    "color" : "red"
  }
}

1번 id를 가진 apple에 color를 추가해 보았습니다.

응답 결과로 _version이 2로 변경된 것을 확인할 수 있습니다.

 


Document 삭제

이번엔 마지막으로 document를 삭제해 보도록 하겠습니다.

예상하셨겠지만 DELETE 메서드를 사용하여 document를 삭제할 수 있습니다.

curl -XDELETE 'localhost:9200/test10/info/2?pretty'
{
  "_index" : "test10",
  "_type" : "info",
  "_id" : "2",
  "_version" : 2,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 4,
  "_primary_term" : 1
}


curl -XGET 'localhost:9200/test10/info/2?pretty'
{
  "_index" : "test10",
  "_type" : "info",
  "_id" : "2",
  "found" : false
}

Index 삭제

index와 type도 삭제해 봐야겠죠? 라고 작성하려고 했는데 type는 삭제가 안되더라구요.

2.0 버전부터는 type를 삭제할 때 query를 이용해야 하는 것 같습니다.

test10 index를 삭제해 보겠습니다.

test10을 조회해보니 아래와 같이 not_found와 함께 404 status를 확인할 수 있었습니다.

curl -XDELETE 'localhost:9200/test10?pretty'
{
  "acknowledged" : true
}


curl -XGET 'localhost:9200/test10?pretty'
{
  "error" : {
    "root_cause" : [
      {
        "type" : "index_not_found_exception",
        "reason" : "no such index [test10]",
        "resource.type" : "index_or_alias",
        "resource.id" : "test10",
        "index_uuid" : "_na_",
        "index" : "test10"
      }
    ],
    "type" : "index_not_found_exception",
    "reason" : "no such index [test10]",
    "resource.type" : "index_or_alias",
    "resource.id" : "test10",
    "index_uuid" : "_na_",
    "index" : "test10"
  },
  "status" : 404
}

 

 

 

 

 

반응형

댓글