Elasticsearch04_2_(퀴즈로 엘라스틱서치 익히기)

2024. 12. 31. 17:55ELK가_뭐지/Elasticsearch

퀴즈로 엘라스틱서치 익히기

데이터 입력(_bulk)

post tourcompany/customerlist/_bulk?pretty
{"index" : {"_id":"1"}}
{"name":"Alfred", "phone":"010-1234-5678", "holiday":"Disneyland", "departure_date":"2017/01/20"}
{"index" : {"_id":"2"}}
{"name":"Huey", "phone":"010-2222-4444", "holiday":"Disneyland", "departure_date":"2017/01/20"}
{"index" : {"_id":"3"}}
{"name":"Naomi", "phone":"010-3333-5555", "holiday":"Hawaii", "departure_date":"2017/01/10"}
{"index" : {"_id":"4"}}
{"name":"Andra", "phone":"010-6666-7777", "holiday":"Borabora", "departure_date":"2017/01/11"}
{"index" : {"_id":"5"}}
{"name":"Paul", "phone":"010-9999-8888", "holiday":"Hawaii", "departure_date":"2017/01/10"}
{"index" : {"_id":"6"}}
{"name":"Colin", "phone":"010-5555-4444", "holiday":"Venice", "departure_date":"2017/01/16"}
  1. tourcompany 인덱스에서010-3333-5555를 검색하십시오.
    1. # url
      get tourcompany/customerlist/_search?q=phone:"010-3333-5555"
      # query dsl
      get /tourcompany/_search
      {
        "query" : {"match_phrase": {"phone": "010-3333-5555"}}
      }
  2. 휴일여행을디즈니랜드로떠나는사람들의핸드폰번호를조회하십시오(phone필드만출력).
    1. # url
      get tourcompany/customerlist/_search?q=holiday:"Disneyland"&_source=phone
      
      # query dsl
      GET tourcompany/_search
      {
        "query":{"match_phrase": {
          "holiday": "Disneyland"
        }},
        "_source": "phone"
      }
  1. departure date가 2017/01/10과 2017/01/11인 사람을 조회하고 이름 순으로 출력하십시오. (name과 departure date 필드만출력)
    1. # url
      get tourcompany/customerlist/_search?q=departure_date:"2017/01/10" OR "2017/01/11"&_source=name,departure_date&sort=name.keyword
      # query dsl
      get tourcompany/customerlist/_search
      {
       "query":{
         "bool": {
           "should": [
             {"match": {"departure_date": "2017/01/10"}},
             {"match": {"departure_date": "2017/01/11"}}
           ]
         }
       },
       "_source":["name","departure_date"],
       "sort":[{"name.keyword":"asc"}]
      }
      (name필드는 text타입이라 정렬이 안된다. 때문에 .keyword를 사용함.)
  2. BoraBora 여행은공항테러사태로취소됐습니다.BoraBora여행자의명단을삭제해주십시오.
    1. # url
      POST  tourcompany/customerlist/_delete_by_query?q=holiday:"Borabora"
      
      # query dsl
      POST tourcompany/_delete_by_query
      {
       "query" : {"match" : {"holiday":"Borabora"}}
      }
      DELETE 메서드를 사용할 것 같았지만 _delete_by_query를 사용한다는 것!!
  3. Hawaii 단체 관람객의 요청으로 출발일이 조정됐습니다. 2017/01/10에 출발하는 Hawaii의 출발일을 2017/01/17일로수정해주십시오
    1. POST tourcompany/customerlist/_update_by_query
      {
       "script": {
         "inline": "ctx._source.departure_date='2017/01/17'",
         "lang": "painless"
       },
       "query": {
         "bool": {
           "must": [
             {"match": {"departure_date": "2017/01/10"}},
             {"match": {"holiday": "Hawaii"}}
           ]
         }
       }
      }
      
      script 필드
      업데이트하려는 필드를 지정하고 새 값을 설정하는데 사용
      inline : 실행할 스크립트를 작성
      • ctx._source: 현재 문서의 데이터를 나타낸다.
      • ctx._source.departure_date:문서의 departure_date필드 참조
      • ='2017/01/17': departure_date 의 값을 2017/01/17으로 변경
      lang : 스크립트 언어 지정, Elasticsearch 기본 스크립팅 언어 painless사용함.
    2. query 필드
      업데이트 대상 문서를 필터링하는 조건을 정의