Elasticsearch

[Elasticsearch] Elasticsearch API

데이터 세상 2022. 1. 15. 15:40
728x90
반응형

Elasticsearch API

Elasticsearch는 RESTFul 방식의 API를 제공하며, JSON 기반으로 통신한다.

Elasticsearch에서 사용하는 HTTP Method 기능 데이터베이스 질의 문법
GET 데이터 조회 SELECT
PUT 데이터 생성 INSERT
POST 인덱스 업데이트, 데이터 조회 UPDATE, SELECT
DELETE 데이터 삭제 DELETE
HEAD 인덱스의 정보 확인 -

인덱스 관리 API(Indices API)

index 색인 데이터
indexing 색인하는 과정
indices 매핑 정보를 저장하는 논리적인 데이터 공간

Schemaless

문서를 색인하기 위해서는 인덱스를 생성하는 과정이 필요한데 인덱스 생성 과정없이 문서를 추가하더라도 문서가 색인되도록 지원하는 기능

최초 문서 색인될 때 인덱스가 존재하지 않는 경우 문서가 색인될 수 있게 인덱스를 자동으로 생성

이 기능은 성능에 영향을 주기 때문에 특수한 상황에서만 제한적으로 사용해야 한다.

데이터가 대부분 복잡한 구조를 갖기 때문에 검색 품질이 떨어지거나 성능상 문제가 발생할 가능성이 커진다.

노드 설정 파일에서 다음과 같이 설정할 경우 자동 인덱스 생성 불가
action.auto_create_index: false

인덱스 별로 특정 칼럼 자동 매핑 생성 비활성화
index.mapper.dynamic: false

인덱스 생성

인덱스를 생성할 때는 매핑 세부 설정을 이용

매핑은 문서와 문서에 포함된 필드, 필드 타입 등을 지정하는 것이 가능한 설정 방식

※ 한번 생성된 매핑 정보는 변경할 수 없다.

[kibana] Dev Tools 메뉴 화면에서 다음과 같은 요청을 입력할 경우 sample이라는 인덱스가 생성된다.

http://localhost:5601/app/dev_tools#/console

  • keyword: 단순 문자열로 저장하고 싶은 경우
  • text: 형태소 분석을 원할 경우
PUT /sample
{
    "settings": {
       "number_of_shards": 3,
       "number_of_replicas": 2
    },
    "mappings": {
  	"properties": {
    	"sampleCd": {"type": "integer"},
        "sampleNm": {"type": "text"},
        "sampleNmEn": {"type": "text"},
        "openDt": {"type": "date"},
        "typeNm": {"type": "keyword"}
    }
  }
}

결과

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "sample"
}

인덱스 삭제

다음 명령을 실행할 경우 sample 인덱스가 삭제된다.

DELETE /sample

※ 인덱스를 삭제할 경우 복구할 수 없기 때문에 신중하게 해야 한다.

문서 관리 API(Document API)

문서를 색인하고 조회, 수정, 삭제를 지원하는 API

색인된 문서의 ID를 기준으로 한 건의 문서를 다뤄야 하는 경우 문서 관리 API를 사용

  • Index API: 한 건의 문서 색인
  • Get API: 한 건의 문서 조회
  • Delete API: 한 건의 문서 삭제
  • Update API: 한 건의 문서 업데이트

Multi-Document API

다수의 문서를 처리하는 경우 사용하는 API

  • Multi Get API: 다수의 문서 조회
  • Bulk API: 대량의 문서 색인
  • Delete By Query API: 다수의 문서 삭제
  • Update By Query API: 다수의 문서 업데이트
  • Reindex API: 인덱스의 문서를 다시 색인

검색 API(Search API)

URI 방식의 검색 질의

HTTP URI(Uniform Resource Identifier) 형태의 파라미터를 URI에 추가해 검색하는 방법

POST /index_name/_search?q=test

q 파라미터를 사용해 해당 용어와 일치하는 문서 조회

q 파라미터에 별도의 필드명을 지정하지 않으면 존재하는 모든 필드를 대상으로 검색 수행

Request Body 방식의 검색 질의

RESTFul API 방식인 QueryDSL을 사용해 요청 본문(request body)에 질의 내용을 추가해 검색하는 방법

POST /{index name}/_search
{
    "size": # 몇 개의 결과를 반환할지 결정(기본값 10)
    "from": # 어느 위치부터 반환할지 결정
            # 0부터 시작하면 상위0~10건의 데이터를 반환(기본값 0)
    "_source": # 특정 필드만 결과로 반환하고 싶을 때 사용
    "sort": # 특정 필드를 기준으로 정렬, (asc, desc)    
    "query": {
        # 검색할 조건을 정의
    }
    "filter": {
        # 검색 결과 중 특정한 값을 다시 보여줌
        # 결과 내에서 재검색할 때 사용하는 기능 중 하나
        # 필터를 사용하게 되면 자동으로 score 값이 정렬되지 않는다.
    }
}

집계 API(Aggregration API)

데이터 집계

POST /index_name/_search?size=0
{
    "agg":{
        "agg_name": {
            "terms": {
                "field": "agg 대상 field명"
            }
        }
    }
}

데이터 집계 타입

Bucket Aggregation

  • 집계 중 가장 많이 사용
  • 문서의 필드를 기준으로 버킷을 집계

Metric Aggregation

  • 문서에서 추출된 값을 가지고 Sum, Max, Min, Avg를 계산

Matrix Aggregation

  • 행렬의 값을 합하거나 곱함

Pipeline Aggregation

  • 버킷에서 도출된 결과 문서를 다른 필드 값으로 재분류
  • 다른 집계에 의해 생성된 출력 결과를 다시 한번 집계

References

728x90
반응형