elsasticsearch는 Lucene 기반의 오픈 소스 검색 엔진
실시간 검색, 분석 지원
분산 환경 지원
트랜잭션을 제공하지 않음
업데이트가 빈번하게 발생한다면 다른 NoSQL을 사용
RESTFull 기반 JSON 메시지 사용
analysis는 full text를 용어(term)로 변환하는 일련의 과정이다. 어떤 분석기(analyzer)를 사용 하는지에 따라,
FOO BAR, Foo-Bar, foo, bar 등은 foo, bar 등의 용어로 변환된다. 이런 용어(term)들은 실제 index에 저장되는 것들이다.
Full text query(term query 와 다름) FoO:bAR는 용어(term) foo, bar로 분석되고 index에 저장된다. 이런 분석 프로세스는 Elasticsearch로 하여금 full text query를 수행할 수 있게 한다. text와 term 용어도 함께 보자.
역 색인은 엘라스틱서치가 전체 문서를 찾아보지 않고도 하나의 텀(혹은 단어)을 포함하는 문서를 찾도록 해주는 구조이다.
"denver" 라는 문자열이 Document 1번과 3번에 존재하고 1번의 Document에는 빈도1, 3번의 Document에는 빈도2와 같이 기록한다.
한 cluster는 한개 혹은 여러개의 cluster와 같은 이름을 공유하는 node들로 이뤄져있다. 각 cluster는 cluster에 의해 자동으로 선정 된 마스터 노드를 가지고 있으며 이는 현재 마스터 노드가 실패할 경우 다른 노드로 대체될 수 있다.
node는 master node와 data node로 구분
Shard : 검색의 기본 데이터베이스가 되는 인덱스중 큰 인덱스를 여러개의 작은 인덱스로 나누어 저장하는 것
Replica : 다른 노드에 Shard와 같은 데이터를 복제하여 안정성 제공
전체 클러스트 상태를 저장하는 저장소
전체 클러스터가 재실행 되거나 노드, 인덱스등이 추가/삭제될 때 설정된 클러스터의 상태를 유지하기 위해 데이터를 복사하고 재배치 하는 활동
데이터 구조
Index는 RDB의 데이터베이스와 비슷하다. Index는 type과 field를 포함한 mapping을 가지고 있다. Index는 논리적인 Namespace(하나 혹은 여러개의 primary shard를, 또는 0 혹은 여러개의 replica shard를 맵핑하는)이다.
RDB의 Table과 유사하다.
document는 엘라스틱서치에 저장된 JSON document이다. 이는 관계형 데이터베이스의 행(row)와 비슷하다. 각 document는 index에 저장되며 type과 id를 가진다. document는 0개 혹은 여러개의 field, 혹은 key-value pair를 포함하는 JSON object이다.(다른 언어에서는 hash/hashmap/associative array로 알려져 있다). 색인되어있는(indexed) 본연의 JSON document는 _source field에 저장되며, document의 검색, 슥듭(getting)이 일어날 때 기본값(default)에 의해 응답된다.
Document의 id는 document를 구분한다. document의 index/id는 유일해야한다. 만약 id가 제공되지 않으면 자동으로 생성된다.(routing 참조)
Document는 field나 key-value pair 리스트를 포함하고 있다. 값은 간단한 값(문자열, 정수, Date 등), 혹은 배열이나 object같은 집합체(structure)가 될 수 있다. Field는 관계형 데이터베이스 테이블의 열(column)과 비슷하다. 각각의 Field를 위한 mapping은 field안에 저장되어지는 데이터와 독립적인 타입(문자열, 정수, object)을 가지고 있다. Mapping은 또한 필드의 값이 어떻게 분석될것인지를 정의할 수 있게 해준다.
Mapping은 관계형 데이터베이스의 스키마(schema defintion)과 비슷하다. 각각의 Index는 mapping을 갖는다. 이는 Document가 Indexing될 때 정의될수도 있고 자동으로 생성될 수도 있다.
쿼리와 필터 비교
스코어를 계산하지 않으므로 쿼리에 비해 월등히 빠름
결과가 메모리에 캐싱 됨
_cache 옵션을 사용하여 캐싱 여부 설정 가능
다른 필터나 쿼리, 어그리게이션 등의 처리에 사용
대부분의 옵션은 쿼리와 동일
[참고 자료]
hxxp://www.jopenbusiness.com/mediawiki/ElasticSearch