1. 특징

1) Apache Lucene 기반 (Full Text 검색엔진을 만들 수 있는 라이브러리를 제공, 자바언어로 개발, 사용자위치정보, 다국어 검색지원, 자동완성 지원, 미리보기 지원, 철자수정 기능 지원 / 대부분 Elasticsearch에서도 지원)

2) 분산시스템
- 여러개의 Node로 구성되어 있는 분산시스템
- Node는 데이터를 색인하고 검색을 수행하는 단위 프로세스
- 데이터는 각 데이터 Node에 분산저장
- Replica를 유지하여 데이터 보호

3) REST API를 통해 데이터 처리

4) RDBMS와 Elastic Search 구조 비교 (seunghyuneom님의 SliceShare)

RDBMS ElasticSearch
Database Index
Table Type
Row Document
Column Field
Scheme Mapping

2. 용어

1) Cluster : ElasticSearch의 가장 큰 시스템 단위
- 하나의 Cluster는 동일한 cluster.name 내 여러개 Node로 구성되어 있음
- 같은 Cluster 이름으로 노드를 실행 시키면 자동확장 (네트워크 바인딩)

2) Node : 실행중인 ElasticSearch Instance
- Master Node : Cluster 메타 정보 관리, Node 추가 삭제
- Data Node : 실제 데이터를 저장하는 Node

3) Index : 관련성이 있는 데이터의 저장 위치
- 물리적인 Shard에 대한 논리적인 이름 공간

4) Shard : Index의 데이터를 저장하여 Indexing된 Document가 실제 저장되는 곳
- Primary Shard : 모든 Document는 단 하나의 Primary Shard에 위치, 갯수는 Index를 생성할 때 결정되고 변경될 수 있음(default)
- Replicat Shard : Primary Shard의 복사본
- 장애발생 시 복구, 검색에 대한 Concurrnt Read 보장

5) 네트워크 바인딩 : 다른 서버의 노드와 바인딩 (자유롭게 Scale-in/out 가능)

3. Rest API 예제

CRUD Elastic Search
Create Post
Read Get
Update Put
Delete Delete
- curl -X {method} http://host:port/{Index}/{Type}/{Id}

1) POST (생성)

curl -XPOST http://localhost:9200/custom/test/1 -d '
{
  "title": "Elasticsearch Test",
  "name": "Lee",
  "date": "2017-07-10"
}'
  • Response

    {“_index”:”custom”,”_type”:”test”,”_id”:”1”,”_version”:1,”result”:”created”,”_shards”:{“total”:2,”successful”:1,”failed”:0},”created”:true}

2) PUT (업데이트)

curl -XPUT http://localhost:9200/custom/test/1 -d '
{
  "title": "Elasticsearch Test Update",
  "name": ["Lee", "Cho"],
  "date": "2017-07-11"
}'
  • Response

    {“_index”:”custom”,”_type”:”test”,”_id”:”1”,”_version”:2,”result”:”updated”,”_shards”:{“total”:2,”successful”:1,”failed”:0},”created”:false}

3) GET (조회 / pretty 옵션은 보기좋게 출력하고 싶을때 사용)

curl -XGET http://localhost:9200/custom/test/1?pretty=true
  • Response

    {
    “_index” : “custom”,
    “_type” : “test”,
    “_id” : “1”,
    “_version” : 2,
    “found” : true,
    “_source” : {
    “title” : “Elasticsearch Test Update”,
    “name” : [
    “Lee”,
    “Cho”
    ],
    “date” : “2017-07-11”
    }
    }

4) DELETE (삭제)

curl -XDELETE http://localhost:9200/custom/test/1
  • Response

    {“found”:true,”_index”:”custom”,”_type”:”test”,”_id”:”1”,”_version”:3,”result”:”deleted”,”_shards”:{“total”:2,”successful”:1,”failed”:0}}

기타.

1) Elasric Search의 동작방식 (NAVER D2)
- Creating, indexing and deleting a document
- Retrieve, query and fetch a document

2) 설치방법
- ‘ELK 설치/실행 (Elastic Search + Kibana + Logstash)’ : ‘1. ElasticSearch를 설치합니다. (ubuntu 기준) 참고’

참고 사이트
seunghyuneom님의 SliceShare : https://www.slideshare.net/seunghyuneom/elastic-search-52724188
NAVER D2 SliceShare : https://www.slideshare.net/deview/2d1elasticsearch