Skip to content
Gee edited this page Dec 4, 2017 · 1 revision

목록


문제 1

week3_exercise_{id}라는 이름의 Index를 생성하고 (id : email 앞자리) 다음과 같이 mapping을 추가하자
Field : 데이터이용량, Datatype : long
Field : 날짜, Datatype : date
Field : 어플리케이션, Datatype : keyword

풀이 1

PUT week3_exercise_higee
{
  "mappings": {
    "week3_exercise_higee": {
      "properties": {
        "데이터이용량": {
          "type": "long"
        },
        "날짜": {
          "type": "date"
        },
        "어플리케이션": {
          "type": "keyword"
        }
      }
    }
  }
}

문제 2

Documents API를 이용해서 다음의 Documents를 넣어보자
{“데이터이용량” : 10000, “날짜” : “2017-11-27T13:00”, “어플리케이션” : “페이스북”}
{“데이터이용량” : 15000, “날짜” : “2017-11-27T15:00”, “어플리케이션” : “지메일”}

풀이 2

POST week3_exercise_higee/week3_exercise_higee
{
  "데이터이용량": 10000,
  "날짜": "2017-11-27T13:00",
  "어플리케이션": "페이스북"
}
POST week3_exercise_higee/week3_exercise_higee
{
  "데이터이용량": 15000,
  "날짜": "2017-11-27T15:00",
  "어플리케이션": "지메일"
}

문제 3

데이터 사용량을 Bytes 형식으로 표시되게 해보자 (예: 14.648KB, 9.766KB)

풀이

문제 4

Reindex API를 이용해서 위의 Index에서 “어플리케이션” : “페이스북” 인 document를 week3_exercise_{id}_reindex로 옮겨보자

풀이 4

POST _reindex
{
  "source": {
    "index": "week3_exercise_higee",
    "query": {
      "term": {
        "어플리케이션": "페이스북"
      }
    }
  },
  "dest": {
    "index": "week3_exercise_higee_reindex"
  }
}

문제 5

Search API로 shopping Index에서 상품가격이 5000~10000 사이인 Documents를 조회해보자

풀이 5

GET shopping/_search
{
  "query": {
    "range": {
      "상품가격": {
        "gte": 5000,
        "lte": 10000
      }
    }
  }
}

문제 6

Search API로 shopping Index에서 다음과 같은 조건을 만족하는 Documents를 조회해보자
상품분류가 “셔츠”, “니트”, “스웨터” 중 하나이고, 주문날짜가 2017-05-01 ~ 2017-07-01 사이이지만,
고객주소_시도가 “서울특별시”가 아니다

풀이 6

GET shopping/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "상품분류: (\"셔츠\", \"니트\", \"스웨터\") AND NOT 고객주소_시도 : \"서울특별시\""
          }
        },
        {
          "range": {
            "주문시간": {
              "gte": "2017-05-01",
              "lte": "2017-07-01"
            }
          }
        }
      ]
    }
  }
}

문제 7

shopping Index에서 주문날짜를 최신순으로 정렬하고 가장 앞 5개를 출력해보자

풀이 7

GET shopping/_search
{
  "size": 5, 
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "주문시간": {
        "order": "desc"
      }
    }

문제 8

shopping Index에서 1) 상품가격이 작은순으로 정렬, 2)그리고 `주문시간` 기준 최신순으로 정렬한 후에 가장 앞 5개 Documents의 `상품분류`를 출력해보자

풀이 8

GET shopping/_search
{
  "size": 5,
  "_source": "상품분류", 
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "상품가격": {
        "order": "asc"
      }
    },
    {
      "주문시간": {
        "order": "desc"
      }
    }
  ]
}

문제 9

shopping Index에서 2017년 11월 동안 상품가격의 최대값을 구해보자

풀이 9

GET shopping/_search
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        },
        {
          "range": {
            "주문시간": {
              "gte": "2017-11-01",
              "lte": "2017-11-30"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "1": {
      "max": {
        "field": "상품가격"
      }
    }
  }
}

문제 10

shopping Index에서 2017년 11월 동안 일별로 평균 상품가격이 높은 구매사이트 5개 별로 평균 상품가격을 구해보자

풀이 10

GET shopping/_search
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        },
        {
          "range": {
            "주문시간": {
              "gte": "2017-11-01",
              "lte": "2017-11-30"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "2": {
      "date_histogram": {
        "field": "주문시간",
        "interval": "1d",
        "time_zone": "Asia/Seoul",
        "min_doc_count": 1
      },
      "aggs": {
        "3": {
          "terms": {
            "field": "구매사이트",
            "size": 5,
            "order": {
              "3-orderAgg": "desc"
            }
          },
          "aggs": {
            "1": {
              "avg": {
                "field": "상품가격"
              }
            },
            "3-orderAgg": {
              "avg": {
                "field": "상품가격"
              }
            }
          }
        }
      }
    }
  }
}
Clone this wiki locally