엘라스틱 서치 메서드

donghwikim00·2025년 1월 24일

19_elastic_search

목록 보기
1/11

실습 하기전 사전작업

  • 엘라스틱 서치 설치
  • axios 라이브러리 설치

PUT

  • 리소스 생성
  • 인덱스 생성
    • PUT /my_index
  • 문서 추가 또는 전체 덮어쓰기

  • 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_index2url 코드를 수정해서 실습했다.

  • 위 명령어를 실행하기 전 엘라스틱 서치 배치 파일을 실행해야 한다.
  • 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

  1. 데이터 검색 및 조회
  2. 특정 문서 조회
    • 특정 ID를 가진 문서를 조회
    • GET /my_index/_doc/1
  3. 데이터 검색
    • _search 엔드포인트를 사용하여 데이터 검색 쿼리를 실행
  4. GET 요청에서는 본문 데이터를 보낼 수 없지만, Elasticsearch는 예외적으로 POST와 동일하게 본문 데이터를 지원
  5. 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 => {
        // console.log(res.data);
        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 사용

예제 코드

// 주소/{고유 인덱스}/_doc/{문서 ID} 에 DELETE 요쳥을 보내면 해당 문서를 삭제할 수 있습니다.

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 메서드를 사용해서 나온 코드에 등장한다.

  • 위 id 값을 변경하고 실행
const url = 'http://localhost:9200/test_index2/_doc/NGOylpQB5IgN5vDf1YOc';
  • delete메서드를 실행하면 삭제되고
  • 다시 get 메서드를 사용하면 위의 입력한 id값이 사라진 것을 확인할 수 있다.
profile
기술 블로그입니다. 여러 언어에 대한 정리, 프로젝트 설명 등을 기록합니다.

0개의 댓글