ElasticSearch CRUD

데이터 저장(PUT)

# index 생성
PUT my_index

# Document 저장
PUT my_index/_doc/1
{
	"message": "hello",
	"name" : "신짱구"
}

# mapping을 통해 Field 속성 정의
# text type - 입력 데이터를 term 단위로 쪼개서 역색인 구조 구성 
# keyword type - 입력된 문자열을 하나의 토큰으로 저장
PUT movie_search
{
  "mappings": {
    "properties": {
      "movieCd": {
        "type": "keyword"
      },
      "movieNm": {
        "type": "text",
        "analyzer": "standard"
      },
      "movieNmEn": {
        "type": "text",
        "analyzer": "standard"
      },
      "prdtYear": {
        "type": "integer"
      },
      "openDt": {
        "type": "integer"
      },
      "typeNm": {
        "type": "keyword"
      },
      "prdtStatNm": {
        "type": "keyword"
      },
      "nationAlt": {
        "type": "keyword"
      },
      "genreAlt": {
        "type": "keyword"
      },
      "repNationNm": {
        "type": "keyword"
      },
      "repGenreNm": {
        "type": "keyword"
      },
      "companies": {
        "properties": {
          "companyCd": {
            "type": "keyword"
          },
          "companyNm": {
            "type": "keyword"
          }
        }
      },
      "directors": {
        "properties": {
          "peopleNm": {
            "type": "keyword"
          }
        }
      }
    }
  }
}


데이터 조회(GET)

# index 정보 조회
GET my_index

# Document 조회
GET my_index/_doc/1

# index의 모든 Document 조회
GET my_index/_search

# 특정 Field만 조회
GET my_index/_search
{
	"_source": "message"
}

# 특정 조건으로 검색 (Chrome, Google 중 하나라도 포함)
GET my_index/_search
{
  "query": {
    "match": {
      "message": "Chrome Google"
    }
  }
}

# "하늘사 Google" 라는 문장 전체가 포함되어야 함
GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": "하늘사 Google"
    }
  }
}

# pink, red 사이에 1개 이하의 단어 포함 가능
GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": {
        "query": "pink red",
        "slop": 1
      }
    }
  }
}


데이터 삭제(DELETE)

# index 삭제
DELETE my_index

# Document 삭제
DELETE my_index/_doc/1

# 조건을 통해 삭제하고 싶다면 POST의 _delete_by_query 기능을 활용한다.


데이터 수정(POST)

# 이미 존재하는 데이터 수정
POST my_index/_doc/1
{
	"message" : "hello world",
	"name" : "김철수"
}

# PUT 과 차이점 id를 지정하지 않을 경우 id 자동 생성
POST my_index/_doc
{
	"message" : "hello world",
	"name" : "김철수"
}

# 조건에 의한 document 삭제
POST my_index/_delete_by_query
{
    "query" : {
        "match" : {
            "name" : "김철수"
        }
    }
}


여러 줄의 쿼리를 동시에 실행하는 방식

# index 선언하지 않고 post
# "_index"에 해당 index를 선언해야함
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

# index 미리 선언하고 post
# 하나의 index에 대한 쿼리만 실행할 수 있다.
POST my_index/_bulk
{"index":{"_id":1}}
{"message":"죽는 날까지 하늘을 우러러 한 점 부끄럼이 없기를"}
{"index":{"_id":2}}
{"message":"죽는 날까지 하늘을 우러러 한 점 부끄럼이 없기를, 잎새에 이는 바람에도 나는 괴로워했다"}
{"index":{"_id":3}}
{"message":"죽는 날까지 하늘을 우러러 한 점 부끄럼이 없기를, 잎새에 이는 바람에도 너는 괴로워했다"}
{"index":{"_id":4}}
{"message":"chrome google Chrome Google"}
{"index":{"_id":5}}
{"message":"하늘사 Google Chrome"}

Discussion and feedback