# REST API

Representational State Transfer(REST) + Application Programming Interface(API)

Rest Api 상의 CRUD 매핑 Method

Create : PUT

Read : Get, Post

Update : Post

Delete : Delete


# cURL : 클라이언트 URL 방식(cURL)


curl -XGET "localhost:9200" : localhost:9200 url로 GET 요청보낸 결과값을 보여달라.

curl -XGET "localhost:9200/update_sample1/_search"

curl -XGET "<ElasticSearch Base 접속 정보>/<인덱스명>/_search"


GET <인덱스명>/_search

GET <인덱스명>/_search

{

"query":{

"match_all": {}

}

}


# 검색 결과 항목

- took : 일라스틱서치가 검색을 실행하는데 소요된 시간

- timed_out : 검색 시간 초과

- _shards : 검색된 샤드(파편) 정보

- hits : 검색 결과

- hits.total : 검색 조건과 일치하는 문서의 총개수

- hits.total.value : 검색 조건과 일치하는 문서의 총개수

- hits.total.relation : 'eq'

- hits.hits : 검색결과의 필드항목 배열


Tip. text 속성의 경우, 자동으로 소문자로 변경되어 전문 검색되지만, (Sunday와 sunday가 같다)

keyword 속성의 경우, 완전 일치 해야만 검색결과를 보여준다.(Sunday와 sunday가 다르다)


# 검색옵션 :

1. match_all 

GET kibana_sample_data_ecommerce/_search

2. match

GET kibana_sample_data_ecommerce/_search

{

  "query": {

    "match": {

      "customer_gender": "FEMALE"

//"customer_gender.keyword": "FEMALE"

    

    }

  }

}

2-1. match의 검색 옵션 : explain(기본값 : false)

일반적으로 쓰이지는 않지만, 확인 용도 

2-2. match의 검색 옵션 : size(기본값 : 20, max : 10000)

match 점수가 높은 top 20만 보인다.

2-3. match의 검색 옵션 : from(기본값 : 1)

해당 몇번째부터 검색하겠다.

GET kibana_sample_data_ecommerce/_search

{

  "query": {

    "match": {

      "customer_gender": "FEMALE"

    }

  },

  "explain": true,

  "from" : 20,

  "size": 40

} // 20~40번째까지만 검색하겠다?


3. sort

# 검색옵션 : sort

GET kibana_sample_data_ecommerce/_search

{

  "query": {

    "match_all": {}

    

  },

  "sort": [

    {

      "customer_id": {

        "order": "desc"

      }

    }

  ]

}

4. _source 

sql에서, select 다음에오는 속성 리스트와 같이 조회하고자 하는 속성만 보고 싶을 떄

# 검색옵션 : _source

GET kibana_sample_data_ecommerce/_search

{

  "query": {

    "match_all": {}

    

  },

  "_source": ["customer_first_name","customer_id"]

}


GET kibana_sample_data_ecommerce/_search

{

  "query": {

    "match_all": {}

    

  },

  "_source": {

    "excludes": ["currency", "geoip.city_name"] // "excludes": "*"

  }

}


5. bool -> must (판단 로직)


# 검색 옵션: bool

GET kibana_sample_data_ecommerce/_search

{

  "query": {

    "bool": { // 판단하겠다.

      "must": [ // AND

        {

          "match": {

            "geoip.continent_name": "africa"

          }

        }, //AND

        {

          "match": {

            "category": "cairo"

          }

        }

      ]

    }

  }

}


5-2. bool -> should

GET kibana_sample_data_ecommerce/_search

{

  "query": {

    "bool": {

      "should": [ // OR

        {

          "match": {

            "geoip.continent_name": "asia"

          }

        },

        {

          "match": {

            "geoip.continent_name": "africa"

          }

        }

      ]

    }

  },

  "size": 200

}


GET kibana_sample_data_ecommerce/_search

{

  "query": {

    "bool": {

      "must": [

        {

          "match": {

            "customer_gender": "male"

          }

        }

      ], // Must의 값을 찾되, should로 가중치를 올려서,

      "should": [

        {

          "match": {

          "geoip.continent_name": "asia"

          }

        }

      ]

    }

  },

  "size": 200

}


# 집계

GET sample_data/_search

{

  "size": 0, //집계 이외의 상세 ROW들은 별로 필요없다(match_all한 결과값 필요없음

  "aggs": { // 집계하겠다.

    "group_by_continent": { //사용자 정의 집계 이름

      "terms": {                 //집계방식 : terms (특정 필드값에 따라 집계, Groupinig)

        "field": "geoip.continent_name", //만약에  text 형식이면 에러, .keyword를 붙여줘야함

        "size": 10

      }

    }

  }

}


# 다중 집계 (그룹핑을 여러번, Depth를 만들어서, 사용자들이 원하는 것을 쉽게 얻어낼 수 있다.)

GET sample_data/_search

{

  "size": 0,

  "aggs": {

    "group_by_continent": { // continent_name별로 그룹핑

      "terms": {

        "field": "geoip.continent_name",

        "size": 10

      },

      "aggs": {                   // 대륙 내에서, price로 그룹핑 후 계산

        "avg_price": {

          "avg": {

            "field": "products.price"

          }

        }

      }

    }

  }

}



  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기