실습 하기전 사전작업
- 엘라스틱 서치 설치
- axios 라이브러리 설치
PUT
- 리소스 생성
- 인덱스 생성
- 문서 추가 또는 전체 덮어쓰기
- PUT 요청은 리소스의 ID를 명시적으로 지정해야 함
- 기존 리소스가 있다면 덮어씀 (업데이트와는 다름)
- 데이터베이스로 치면 스키마 같은 개념이라고 나는 이해한다(아닐 수 있음).
예제 코드
const axios = require('axios');
const url = 'http://localhost:9200/test_index';
axios.put(url)
.then(res => {
console.log(res.data);
})
.catch(err => {
console.error(err);
});
test_index라는 이름의 인덱스를 put 매서드로 생성한다.
- 위 코드를 vscode 터미널에서 본인이 만든 이 파일이 있는 프로젝트에 들어가서
node <파일명> 이런식으로 입력하면 true test_index라는 문구가 뜬다.

- 작성자는 이미
test_index를 만들어서 test_index2로 url 코드를 수정해서 실습했다.
- 위 명령어를 실행하기 전 엘라스틱 서치 배치 파일을 실행해야 한다.
- PUT에서도 POST 메서드처럼 데이터를 넣을 수 있다.
POST
- 리소스 생성 또는 특정 작업 수행
- 문서 추가 (자동 ID 생성)
- POST는 문서를 추가하며, ID를 명시하지 않아도 Elasticsearch가 자동으로 생성(_doc 뒤에 숫자를 적으면 그게 id값이 됨 ex) _doc/1 id값이 1이 됨)
- 특정 작업 수행
- 검색, 조건부 삭제 등 본문 데이터 전달이 필요한 작업 수행
- 문서 ID를 지정하지 않으면 자동 생성
- 검색 쿼리나 삭제 작업에서 본문 데이터를 전달할 때 사용
- 작성자는 이걸 약간 테이블을 다루는 것과 비슷하다고 생각한다. 검색, 조건부삭제는 약간 SQL문 느낌(아님 말고)
예제 코드
const axios = require('axios');
const url = 'http://localhost:9200/test_index2/_doc';
const data = {
name: 'Introduction to React',
description: 'React is a JavaScript library for building user interfaces, maintained by Facebook.'
};
axios.post(url, data)
.then(res => {
console.log(res.data);
})
.catch(err =>{
console.error(err);
});
test_index2에 데이터를 넣는 코드이다.
- 위 코드를 실행할려면 PUT 때 처럼 터미널에 들어가서 본인이 만든 파일 경로로 들어가(cd <본인 폴더(파일)명> 입력 시 그 경로로 이동 가능) node 명령어로 파일을 실행하면 아래와 같은 문구가 나온다.

- 이렇게 문구가 나온다면 성공한 것이다.
- 이 데이터를 조회할려면 GET 메서드를 사용하면 되는데 그건 GET 메서드 영역 부분에서 설명하겠다.
GET
- 데이터 검색 및 조회
- 특정 문서 조회
- 특정 ID를 가진 문서를 조회
- GET /my_index/_doc/1
- 데이터 검색
- _search 엔드포인트를 사용하여 데이터 검색 쿼리를 실행
- GET 요청에서는 본문 데이터를 보낼 수 없지만, Elasticsearch는 예외적으로 POST와 동일하게 본문 데이터를 지원
- Query 사용 가능
- GET /my_index/_search?q=name:Product
예제코드
const axios = require('axios');
const url = 'http://localhost:9200/test_index2/_search';
const query = {
query: {
match: {
name: 'React'
}
}
};
axios.get(url, {
data: query
})
.then(res => {
const jsonRes = JSON.stringify(res.data, null, 2);
console.log(jsonRes)
})
.catch(err =>{
console.error(err);
});
test_index2에서 React라는 이름이 붙은 쿼리를 검색하는 코드이다.
- 위 코드를 터미널에서 실행하면 아래와 같이 POST에서 실습한 React가 들어간 데이터가 나온다.

- 엘라스틱 서치에서는 score를 제공해 관련도가 더 높은것이 먼저 나오도록 제공한다
- 나는 나중에 이걸 활용해서 사용자가 데이터를 입력하면 입력한 것과 연관되어 있는 강의제목 5개정도를 출력하는 코드를 짜볼 생각이다.
DELETE
- 인덱스 전체 삭제
- 인덱스와 해당 인덱스에 포함된 모든 문서를 삭제
- DELETE /my_index
- 특정 문서 삭제
- 특정 인덱스에서 ID가 지정된 문서를 삭제
- DELETE /my_index/_doc/1
- 삭제된 인덱스는 복구할 수 없음
- 조건부 삭제는 POST 사용
예제 코드
const axios = require('axios');
const url = 'http://localhost:9200/test_index/_doc/JOyEcpQByR3t3Na-ybex';
axios.delete(url)
.then(res => {
console.log(res.data);
})
.catch(err =>{
console.error(err);
});
- 기본적으로 id를 제공하긴 하지만 무작위(긴 코드) 이기 떄문에 id값을 지정해 주는 것이 실습하기에는 편하다.
- id값은 get 메서드를 사용해서 나온 코드에 등장한다.

const url = 'http://localhost:9200/test_index2/_doc/NGOylpQB5IgN5vDf1YOc';
- delete메서드를 실행하면 삭제되고
- 다시 get 메서드를 사용하면 위의 입력한 id값이 사라진 것을 확인할 수 있다.