Elasticsearch 기본개념

WAS·약 23시간 전
0

Elasticsearch

목록 보기
1/1

Elasticsearch

  • RESTful 검색 및 분석 엔진, 데이터 분석에 최적화된 데이터베이스

✅ 용도

  • 주로 Elasticsearch 는 크게 데이터 수집 및 분석, 검색 최적화 이렇게 두가지 용도로 사용한다

데이터 수집 및 분석

  • 대규모 데이터를 수집 및 분석하는데 최적화
  • 주로 데이터 저장(Elasticsearch), 데이터 수집 및 가공(Logstash), 데이터 시각화(Kibana) 를 활용해 데이터 수집 및 분석

검색 최적화

  • 데이터가 많더라도 뛰어난 검색속도를 가지고 있음
  • 오타나 동의어를 고려하여 유연하게 검색할 수 있는 기능을 가지고 있음

Elasticsearch 작동 방식
일반 데이터베이스 (MySQL, ORACLE 등)는 SQL문으로 통신을 해야한다
하지만 Elasticsearch 데이터베이스는 REST API 방식으로 통신을 해야한다 (만든 사람 마음)

EX) 일반 DB에서 데이터 삽입과 조회할 때
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
SELECT * FROM users;

EX) Elasticsearch 에서 데이터 삽입과, 조회할 때

curl -X POST "localhost:9200/users/_doc" -H 'Content-Type: application/json' -d'
{
  "name": "Alice",
  "email": "alice@example.com"
}'

curl -X GET "localhost:9200/users/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match_all": {}
  }
}'

일반 DB에서는 매번 CLI로 SQL문을 입력하기 불편해서 Dbeaver, Sql Developer 와 같은 GUI 툴을 활용한다
Elasticsearch 에서도 매번 API 요청을 보내기 불편하기 때문에 GUI 툴이 존재한다 -> Kibana


도커를 사용하면 Elasticsearchkibana 컨테이너를 각각 띄워서 편하게 사용할 수 있다

Kibana, Elasticsearch 아키텍처 -> kibana를 사용하여 엘라스틱서치를 조작할 수 있음


✅ RDBMS와 Elasticsearch 차이

사진처럼 두개의 차이는 명칭에서 다르다
참고로 RDBMS의 인덱스와 Elasticsearch의 인덱스는 다르다


Elasticsearch 에서 인덱스 생성 = RDBMS에서 테이블 생성

  • 인덱스 생성
    PUT /{인덱스명}
    EX) PUT /users

  • 인덱스 조회
    GET /{인덱스명}
    💡 되도록이면 뒤에 _search 를 붙여서 사용하자 -> GET /{인덱스명}/_search
    EX) GET /users/_search

생성하지 않은 인덱스를 조회하면 index_not_found_exception 발생

  • 인덱스 삭제
    DELETE /{인덱스명}
    EX) DELETE /{users}
    생성하지 않은 인덱스를 삭제하면 index_not_found_exception 발생

Elasticsearch 에서 매핑 을 정의 = RDBMS에서 테이블의 스키마 정의

  • 매핑 정의하기
    💡 매핑을 정의하기 전에 인덱스 를 반드시 생성해야함
    PUT /{인덱스명}/_mappings
// EX
PUT /users/_mappings
{
 "properties": {
 "name": { "type": "keyword" }, // 문자열
 "age": { "type": "integer" }, // 정수형
 "is_active": { "type": "boolean" } // 불린형
 }
}

Elasticsearch 에서 도큐먼트 삽입 = RDBMS에서 테이블에 데이터를 삽입

  • id를 자동으로 생성해서 도큐먼트 삽입하기
    💡 도큐먼트 를 삽입하기전에 반드시 인덱스 생성 은 해야함
    💡 도큐먼트 를 삽입하기전에 매핑 을 하지 않아도 자동으로 타입 추론하여 매핑을 생성함
    -> 의도하지 않은 타입 매핑일 생길 수 있기 때문에 되도록이면 매핑 한 후 도큐먼트를 삽입하자
    아래와 같이 도큐먼트를 삽입하면 랜덤 ID 값이 만들어짐
    POST /{인덱스명}/_doc
// 도큐먼트 저장 (id 자동 생성)
 POST /users/_doc
{
 "name": "Alice",
 "age": 28,
 "is_active": true
}
  • id를 직접 지정해서 도큐먼트 삽입하기
    POST /{인덱스명}/_create/{id}
// 도큐먼트 저장 (id 직접 지정)
POST /users/_create/1
{
 "name": "jscode",
 "age": 30,
 "is_active": true
}
  • id를 직접 지정해서 저장 (이미 id가 존재한다면 데이터 덮어씌움)
    PUT /{인덱스명}/_doc/{id}
// 도큐먼트 저장 및 업데이트
PUT /users/_doc/2
{
 "name": "jason",
 "age": 30,
 "is_active": true
}
  • 도큐먼트 조회
    모든 도큐먼트 조회 : GET /{인덱스명}/_search = ex) GET /users/_search
    id로 특정 도큐먼트 조회 : GET /{인덱스명}/_doc/{id} = ex) GET /users/_doc/1
  • 도큐먼트 수정

도큐먼트를 통째로 덮어쒸우기 = PUT /{인덱스명}/_doc/{id} = ex)

PUT /users/_doc/1
{
 "name": "new"
}

특정 도큐먼트만 수정하기 = # POST /{인덱스명}/_update/{id} = ex )

POST /users/_update/2
{
 "doc": {
 "age": 10,
 "is_active": false
 }
}
  • 도큐먼트 삭제
    DELETE /{인덱스명}/_doc/{id}
    ex) DELETE /users/_doc/2
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글