엘라스틱서치
4. 데이터 처리
판교가고싶어요
2021. 8. 31. 18:08
4. 데이터 처리
- 엘라스틱서치는 검색, 저장, 설정 등 모든 정보를 JSON 도큐먼트 형식으로 주고받는다.
- 엘라스틱서치는 자원별로 고유한 URL을 매핑해서 사용한다.
- REST API를 활용해 CRUD가 가능하다.
- curl 명령어나 postman, kibana devtools를 사용할 수 있다. (키바나 포트는 5601)
CRUD
- 도큐먼트를 접근할 때는 <인덱스명>/_doc/<id> 처럼 고정자 _doc 을 사용한다.
curl -XPUT "http://localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d'
(d는 데이터 입력 옵션)- 데이터를 입력할 때는 PUT 메서드를 사용한다.
- PUT 메서드 사용시 아이디는 자동으로 생성되지 않는다.
PUT my_index/_doc/1 { "name":"Pangyo Kim", "message":"안녕하세요 Elasticsearch" }
- 문서를 새로 생성 시 결과로 "result": "created"가 표시되며 덮어써질경우 "updated"가 표시된다.
- 덮어씌워지는 것을 방지하기 위해서는 _create를 사용하면 된다.
- 조회는 GET 메서드를 사용한다.
GET my_index/_doc/1
- 문서의 내용 "_source"에 있다.
- 삭제는 DELETE 메서드를 사용한다. 도큐먼트와 인덱스 모두 사용가능하다.
- 반환 결과는
"result": "deleted"
or"found": false
- 인덱스 삭제시 "acknowledged": true 응답을 받는다.
- 수정은 POST 메서드를 사용한다.
- id를 지정하지 않는 경우 임의의 문자열로 도큐먼트 아이디가 생성된다.
-
POST my_index/_doc { "name":"Pangyo Kim", "message":"안녕하세요 Elasticsearch" }
- _update 를 사용할 경우 일부 필드만 변경할 수 있으나 내부적으로는 새로 생성된다.
- 해당 문서의 "_version" 값이 하나 증가한다.
-
POST my_index/_update/1 { "doc": { "message":"안녕하세요 Kibana" } }
벌크 API
- 여러 명렁을 배치로 실행하는 API 이다.
- 명령문과 데이터문을 반드시 각 한 줄씩 입력해야 한다. (DELETE는 명령문만 있다.)
-
POST _bulk {"index":{"_index":"test", "_id":"1"}} {"field":"value one"} {"index":{"_index":"test", "_id":"2"}} {"field":"value two"}
- <메서드> 인덱스명/_bulk로도 사용할 수 있다.
- 대량의 데이터를 쓸 때는 반드시 bulk API를 쓰자.
- Logstash, SDK 등은 bulk API를 사용한다.
- 엘라스틱 서치는 트랜잭션을 지원하지 않으므로 오류 시 재인덱싱이 필요하다.
- 벌크 명령을 --data-binary @filename을 이용해 파일에 저장된 내용을 실행할 수 있다.
검색 API
- 검색은 인덱스 단위로 이루어진다.
- url 검색은
GET test/_search?q=value AND three
처럼 사용한다. - 데이터 본문 검색은 json 형식으로 엘라스틱서치의 querydsl을 사용한다.
-
GET test/_search { "query": { "match": { "field": "value" } } }
- 쿼리 입력은 항상 "query" 지정자로 시작한다.
- 멀티 테넌시 사용시 인덱스를 쉼표로 연결하거나 와일드카드 *를 사용할 수 있다.