- 클러스터가 어떻게 진행되고 있는지 기본적인 확인
- 클러스터 상태를 확인하기 위해
_cat
API를 사용 - curl를 사용하여 수행 가능 -> 노드 정보: GET
/_cat/nodes?v
상태 정보 : GET/_cat/health?v
- Elasticsearch에서 _언더바가 붙은 것들이 API
- v는 상세하게 보여달라는 의미
- 녹색 : 모든 것이 정상 동작
- 노란색 : 모든 데이터를 사용 가능하지만 일부 복제본은 아직 할당되지 않음(클러스터는 완전히 동작)
- 빨간색 : 어떤 이유로든 일부 데이터를 사용 불가능(클러스터가 부분적으로만 동작)
- index는 일반 RDB에서의 DB 역할
- 모든 인덱스 항목을 조회
- GET
/_cat/indices?v
-
인덱스와 도큐먼트의 단위로 구성 (타입은 deprecated)
-
도큐먼트는 엘라스틱서치의 데이터가 저장되는 최소 단위
-
여러 개의 도큐먼트가 하나의 인덱스를 구성
-
입력 : PUT
ip:9200/index1/type1/1 -d ‘{“num”:1,”name:”test”}’
-
조회 : GET
ip:9200/index1/type1/1
-
삭제 : DELETE
ip:9200/index1/type1/1
-
업데이트 : POST
ip:9200/index1/type1/1_update -d ‘{doc: {“age”:99}}’
7.X부터는 PUT과 POST 혼용 가능
IP:5601
으로 키바나에 접속한 후 왼쪽 탭에서 Devtools 탭을 클릭하여 테스트해 볼 수 있다.
api
```bash
# index와 doc 만들기
# customer 는 인덱스명, 1은 doc의 id
POST /customer/_doc/1
{
"name":"choi",
"age":25
}
# _update로 수정하기
POST /customer/_doc/1/_update
{
doc": {
"name":"change"
}
}
# script 사용
POST /customer/_doc/1/_update
{
"script" : {
"inline": "if(ctx._source.age==25) {ctx._source.age++}"
}
}
# 조회하기
GET /customer/_doc/1
# 삭제하기
DELETE /customer
```
- 작업을 일괄적으로 수행할 수 있는 기능
- 최대한 적은 네트워크 왕복으로 가능한 빨리 여러 작업을 수행할 수 있는 효율적인 매커니즘
- 하나의 행동이 실패해도 그 행동의 나머지는 행동을 계속해서 처리
- API가 반환되면 각 액션에 대한 상태가 전송된 순서대로 제공되므로 특정 액션이 실패했는지 여부를 확인 가능
api
```bash
## 키바나의 Devtools에서 진행 ##
# 벌크 저장
POST /customer/_bulk
{"index":{"_id":"1"}}
{"name":"choi"}
{"index":{"_id":"2"}}
{"name":"kim"}
# 조회
GET /customer/_doc/1
GET /customer/_doc/2
# 수정 및 삭제
POST /customer/_bulk
{"update":{"_id":"1"}}
{"doc":{"age":18}}
{"delete":{"_id":"2"}}
# 조회
GET /customer/_doc/1
GET /customer/_doc/2
```
- 검색 API는 요청 URI나 요청 본문을 통해 검색 매개 변수를 보내서 실행할 수 있다.
- 검색용 REST API는 _search 엔드 포인트에서 액세스할 수 있다.
GET /bank/_search?q=*&sort=account_number:asc&pretty
-
bank 인덱스
-
q=*: q는 쿼리, *는 모든것을 의미 -> 인덱스의 모든 문서를 검색을 지시한 것, 특정 단어 검색을 원한다면 특정 단어를 명시
-
sort: 정렬
-
asc: 오름차순
-
pretty: 이쁘게 출력
-
took: 검색하는데 걸린 시간 (밀리 초)
-
timed_out: 검색 시간이 초과되었는지 여부 알림
-
_shards: 검색된 파편의 수와 성공/실패한 파편의 수를 알림
-
hits: 검색 결과
-
hits.total: 검색 조건과 일치하는 총 문서 수
-
max_score: 가장 높은 점수를 취득한 doc 를 명시, null의 경우 없다는 뜻
-
hits.hits: 검색 결과의 실제 배열(기본값은 처음 10개)
-
hits.sort: 결과 정렬키
명령어
```bash
# 전체 인덱스의 title필드에서 time검색
/_search?q=title:time
# 다중 조건 검색 -> and 또는 or
/_search?q=title:time AND machine
# 점수 계산에서 사용된 상세값 출력
/_search?q=title:time&explain
# doc 출력 생략
/_search?q=title:time&_source=false
# 특정 source 출력
/_search?q=title:time&_source=title,author
# 정렬
/_search?q=title:time&sort=pages
/_search?q=title:time&sort=pages:desc
```
Elasticsearch에서 쿼리를 실행하는데 사용할 수 있는 JSON 스타일 도메인 관련 언어이다. URI에 q=*
대신 JSON 스타일 쿼리 요청 본문을 제공하면 된다.
명령어
```bash
# match_all 쿼리는 지정된 색인의 모든 문서를 검색
POST /bank/_search
{
"query": {"match_all": {}}
}
# 1개만 조회
# size dafult = 10
POST /bank/_search
{
"query": {"match_all": {}},
"size":1
}
# from 매개변수에서 시작하여 size만큼의 문서를 반환
# 즉, 10 ~ 19 까지
# from default = 0
POST /bank/_search
{
"query": {"match_all": {}},
"from": 10,
"size": 10
}
# balance 필드 기준 내림차순 정렬하고 상위 10개
POST /bank/_search
{
"query": {"match_all": {}},
"sort": {"balance":{"order":"desc"}
}
# 특정 필드만 출력
POST /bank/_search
{
"query": {"match_all": {}},
"_source": ["account_number","balance"]
}
# address가 mail lain인 것을 반환
# 일치순으로 나옴 -> mail lane, mail, lane 이런 식
POST /bank/_search
{
"query": {"match": {"address": "mail lane"}}
}
# address가 mail lain과 완벽 일치 반환
POST /bank/_search
{
"query": {"match_phrase": {"address": "mail lane"}}
}
# address가 maill과 lane을 포함하는 모든 계정 반환
POST /bank/_search
{
"query": {
"bool": {
"must": [
{"match": {"address": "mill"}},
{"match": {"address": "lane"}}
]
}
}
}
# mill은 포함하지만 lane은 포함하지 않는 모든 계정 반환
POST /bank/_search
{
"query": {
"bool": {
"must": [
{"match": {"address": "mill"}},
],
"must_not": [
{"match": {"address": "lane"}}
]
}
}
}
```