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
'Elasticsearch' 카테고리의 다른 글
Fluentd (0) | 2022.06.17 |
---|---|
[Elasticsearch] Elasticsearch Stack (0) | 2022.01.15 |
[Elasticsearch] Elasticsearch Cluster, Node (0) | 2022.01.15 |
[Elasticsearch] Elasticsearch 데이터 구조 (0) | 2022.01.15 |
[Elasticsearch] Elasticsearch snapshot 데이터 연동 (0) | 2022.01.15 |