로컬에서는 잘 되는데 ☘️

[ElasticSearch] 데이터 조회(Search)

by youngjun._.


실습 환경

  • 💡 Elasticsearch 7.9.0
  • 💡 Windows 10
  • 💡 Git Bash

ElasticSearch에 메인 기능이라고 볼 수 있는 Search를 실습해보자.

먼저 sample 데이터를 bulk해보자.

sample 데이터 소스

{ "index" : { "_index" : "basketball", "_type" : "record", "_id" : "1" } }
{"team" : "Chicago Bulls","name" : "Michael Jordan", "points" : 30,"rebounds" : 3,"assists" : 4, "submit_date" : "1996-10-11"}
{ "index" : { "_index" : "basketball", "_type" : "record", "_id" : "2" } }
{"team" : "Chicago Bulls","name" : "Michael Jordan","points" : 20,"rebounds" : 5,"assists" : 8, "submit_date" : "1996-10-11"}

1. Index에 데이터 Bulk하기

위에서 확인한 sample 데이터를 삽입하면

curl -XPOST "/ES주소/"_bulk --data-binary @"file명".json

$ curl -XPOST 'http://localhost:9200/_bulk?pretty' --data-binary @simple_basketball.json -H 'Content-Type: application/json'

결과

{
  "took" : 423,
  "errors" : false,
  "items" : [
    {
      "index" : {
        "_index" : "basketball",
        "_type" : "record",
        "_id" : "1",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 0,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "index" : {
        "_index" : "basketball",
        "_type" : "record",
        "_id" : "2",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 1,
        "_primary_term" : 1,
        "status" : 201
      }
    }
  ]
}

잘 bulk 됐다!


2. ✔ _search : 옵션 없이 사용

$ curl -XGET 'http://localhost:9200/basketball/record/_search?pretty'

모든 document가 다 출력된다!

결과

{
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "basketball",
        "_type" : "record",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "team" : "Chicago Bulls",
          "name" : "Michael Jordan",
          "points" : 30,
          "rebounds" : 3,
          "assists" : 4,
          "submit_date" : "1996-10-11"
        }
      },
      {
        "_index" : "basketball",
        "_type" : "record",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "team" : "Chicago Bulls",
          "name" : "Michael Jordan",
          "points" : 20,
          "rebounds" : 5,
          "assists" : 8,
          "submit_date" : "1996-10-11"
        }
      }
    ]
  }
}

3. ✔ _search : URI 옵션

serach 옵션 중 URI 옵션을 사용해보자.

basketball Index 중 points = 30인 데이터만 가져오기 위해 Query를 날리면 된다.

$ curl -XGET 'http://localhost:9200/basketball/record/_search?q=points:30&pretty'

points30인 하나의 데이터가 반환되는 것을 확인할 수 있다.

결과

{
  "took" : 25,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "basketball",
        "_type" : "record",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "team" : "Chicago Bulls",
          "name" : "Michael Jordan",
          "points" : 30,
          "rebounds" : 3,
          "assists" : 4,
          "submit_date" : "1996-10-11"
        }
      }
    ]
  }
}

4. ✔ _search : Request body

Request Body를 사용할 수 있다!

계속 사용되는 -d는 directe의 줄인말

$ curl -XGET http://localhost:9200/basketball/record/_search?pretty -d '
{
  "query" : {
    "term" : {"points" : 30}
  }  
}' -H 'Content-Type: application/json'

term query로 points가 30인 것만 출력했다.

points30인 하나의 데이터가 반환되는 것을 확인할 수 있다.

결과

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "basketball",
        "_type" : "record",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "team" : "Chicago Bulls",
          "name" : "Michael Jordan",
          "points" : 30,
          "rebounds" : 3,
          "assists" : 4,
          "submit_date" : "1996-10-11"
        }
      }
    ]
  }
}

Request Body 활용할 수 있는 방법이 많으니 공식 문서찾아보고 공부해보자.


본 포스팅은 InflearnELK 스택 (ElasticSearch, Logstash, Kibana) 으로 데이터 분석 강의를 참고하여 작성되었습니다.


'BigData > ElasticSearch' 카테고리의 다른 글

[ElasticSearch] Bucket Aggregation  (0) 2020.09.02
[ElasticSearch] Metric Aggregation  (0) 2020.09.01
[ElasticSearch] Mapping  (0) 2020.08.30
[ElasticSearch] 데이터 벌크(Bulk)  (0) 2020.08.28
[ElasticSearch] 데이터 업데이트  (0) 2020.08.27

블로그의 정보

개발하는만두

youngjun._.

활동하기