[ES] 3. 인덱스 설정과 document CRUD API

mallin·2022년 3월 10일
0

ElasticSearch

목록 보기
3/9
post-thumbnail

docker 에 ES 설정도 되었으니 이제 본격적으로 ES 실제 사용하는 방법을 알아보도록 하겠습니다.

Where is Type ❓

데이터 관점의 ES 구조에 대해서 먼저 짚어볼 필요가 있는데요.
제가 ES 관련 첫번째 포스팅 때 데이터 관점의 구조는 Index > Type > Document > mapping, field 로 구성된다고 했었는데 7.0 이후부터 Type 이 완전히 사라졌습니다.
저흰 실습함에 있어서 7.9.3 버전을 사용하기 때문에 Type 은 사용하지 않습니다.
Type 관련 자세한 내용은 해당 글을 참고해주세요 ➡️ Removal of mapping types

ES API 구조

ES 에서 사용하는 API 의 구조는 다음과 같습니다.

http://<호스트>:<포트>/<인덱스>/_doc/<도큐먼트 id>

자원별 고유 URL 로도 접근이 가능하고, http 메소드를 통해서도 접근이 가능합니다.

http 메소드는 PUT, POST, GET, DELETE 를 통해서 자원을 처리합니다

1. 인덱스

1-1. 클러스터 모든 인덱스 조회

그럼 일단 저희가 만든 클러스터에 인덱스가 있는지 없는지를 확인해보겠습니다.

curl -XGET 'localhost:9200/_cat/indices?v'

아직까지 어떤 인덱스도 만들지 않았기 때문에 아무런 인덱스도 노출되지 않는 걸 확인 할 수 있습니다.

1-2. 인덱스 만들기

user 라는 인덱스를 만들어보도록 하겠습니다

curl -XPUT 'localhost:9200/user?pretty'


acknowledged 가 true 인 거로 보아 정상적으로 생성된 것 같습니다.
확실하게 생성되었는지 보기 위해서 첫번째 과정에서 실행했던 명령어를 실행해보면


아까와 달리 user 인덱스가 조회되는 걸 확인할 수 있습니다.
오잉 ? 그런데 health 상태가 ⚠️ yellow 인데요.

인덱스의 health 는 총 3가지 상태를 가지고 있습니다.

상태설명
green모든 샤드가 정상적인 상태
yellow일부 혹은 모든 샤드의 레플리카 샤드가 정상적으로 작동하고 있지 않은 상태
red일부 혹은 모든 샤드의 프라이머리 & 레플리카 샤드가 모두 정상적으로 작동하지 않고 있는 상태

green & yellow 는 쓰기 / 읽기에는 문제가 없는 상태로 여기서 인덱스의 health 상태가 yellow 로 나타나는 이유는 primary , replica 샤드가 하나의 노드에 있을 수 없는데 현재는 노드가 하나 뿐이라 replica shard 의 상태가 UNASSIGNED 가 되었기 때문입니다. 나중에 노드가 늘어나면 green 으로 바뀔거기 때문에 지금 당장은 신경쓰지 않아도 됩니다.

그래도 .. green 으로 변경하고 싶다 ! 라고 하시는 경우에는

curl -XPUT 'localhost:9200/_settings?pretty' -d '{"index":{"number_of_replicas": 0}}' -H 'Content-Type: application/json'

해당 쿼리로 레플리카 샤드의 수를 0 으로 만들어 주시면 인덱스 상태가 green 으로 변한 걸 확인 할 수 있습니다.

2. document

2-1. 인덱스에 document 추가하기

POST 를 사용해서 user 인덱스에 document 를 추가해주도록 하겠습니다.

curl -XPOST '[IP]:[PORT]/[index명]/_doc/[아이디]' -H 'Content-type:application/json' -d '[데이터]'

로 document 를 추가해줄 수 있습니다.
여기서 아이디를 안 적으면 ES 에서 임의적으로 아이디가 들어가게 되고, 아이디를 적어주게 되면 해당 아이디로 document 가 추가됩니다.

아이디를 적었을 때

curl -XPOST 'localhost:9200/user/_doc/1?pretty' -H 'Content-type:application/json' -d '{"name":"parksoyeon"}'

아이디를 안 적었을 때

curl -XPOST 'localhost:9200/user/_doc?pretty' -H 'Content-type:application/json' -d '{"name":"parksoyeon2"}'

2-2. document 조회

모든 document 조회하기
형식 : curl -XGET '[IP]:[PORT]/[index명]/_search?pretty

curl -XGET 'localhost:9200/user/_search?pretty'

특정 document 조회하기
형식 : curl -XGET '[IP]:[PORT]/[index명]/_doc/[아이디]?pretty

curl -XGET 'localhost:9200/user/_doc/1?pretty'

2-3. document 수정

document 수정은 생성과 동일합니다.
변경될 내용을 명시해주면 됩니다. 수정 전 version 보다 수정된 버전이 더 높은 걸 확인할 수 있습니다.

레퍼런스

🙈[Elasticsearch] 입문하기(2) - 기본 API( index, document CRUD )🐵
4.2 CRUD - 입력, 조회, 수정, 삭제
[Elasticsearch] 핵심 개념 - 매핑 타입이 사라진 이유

0개의 댓글