docker 에 ES 설정도 되었으니 이제 본격적으로 ES 실제 사용하는 방법을 알아보도록 하겠습니다.
데이터 관점의 ES 구조에 대해서 먼저 짚어볼 필요가 있는데요.
제가 ES 관련 첫번째 포스팅 때 데이터 관점의 구조는 Index > Type > Document > mapping, field
로 구성된다고 했었는데 7.0 이후부터 Type 이 완전히 사라졌습니다.
저흰 실습함에 있어서 7.9.3 버전을 사용하기 때문에 Type 은 사용하지 않습니다.
Type 관련 자세한 내용은 해당 글을 참고해주세요 ➡️ Removal of mapping types
ES 에서 사용하는 API 의 구조는 다음과 같습니다.
http://<호스트>:<포트>/<인덱스>/_doc/<도큐먼트 id>
자원별 고유 URL 로도 접근이 가능하고, http 메소드를 통해서도 접근이 가능합니다.
http 메소드는 PUT, POST, GET, DELETE 를 통해서 자원을 처리합니다
그럼 일단 저희가 만든 클러스터에 인덱스가 있는지 없는지를 확인해보겠습니다.
curl -XGET 'localhost:9200/_cat/indices?v'
아직까지 어떤 인덱스도 만들지 않았기 때문에 아무런 인덱스도 노출되지 않는 걸 확인 할 수 있습니다.
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 으로 변한 걸 확인 할 수 있습니다.
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"}'
모든 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'
document 수정은 생성과 동일합니다.
변경될 내용을 명시해주면 됩니다. 수정 전 version 보다 수정된 버전이 더 높은 걸 확인할 수 있습니다.
🙈[Elasticsearch] 입문하기(2) - 기본 API( index, document CRUD )🐵
4.2 CRUD - 입력, 조회, 수정, 삭제
[Elasticsearch] 핵심 개념 - 매핑 타입이 사라진 이유