Lucene 기반으로 만들어진 Java 기반의 오픈소스 분산 검색 앤진
역색인 사용
Logstash : 트렌젝션을 수직,집계,파싱하여 elasticsearch로 전달
elasticsearch : 데이터 검색 및 집계
kivana : 시각화 및 모니터링
RDBMS elasticsearch
database index
table type
row document
column field
primary key _id
클러스터
클러스터는 여러 노드의 집합으로 구성되며, 설치시 master node만 존재
primary shard는 데이터를 저장할 때 나눠진 파티션을 말하며, 설치시 5개가 존재
replica shard는 고가용성을 위해 존재하는 primary shard의 복제본을 말하며, 설치시 1개가 존재
primary와 replica는 같은 노드에 존재할 수 없음
Green : 모든 샤드가 정상적으로 동작하고 있는 상태, 모든 인덱스에 쓰기/읽기가 정상적으로 동작한다.
yellow : 일부 혹은 모든 인덱스의 replicas 샤드가 정상적으로 동작하고 있지 않은 상태, 모든 인덱스에 쓰기/읽기가 정상적으로 동작하지만, 일부 인덱스의 경우 replicas가 없어서 primary 샤드에 문제가 생기면 데이터 유실이 발생할 가능성이 있다.
red : 일부 혹은 모든 인덱스의 primary와 replicas 샤드가 정상적으로 동작하고 있지 않은 상태, 일부 혹은 모든 인덱스에 쓰기/읽기가 정상적으로 동작하지 않으며, 데이터의 유실이 발생할 가능성이 있다.
노드
master-eligible node : 마스터 노드, 인덱스 생성, 삭제, 클러스터 노드 추적 관리, 데이터 입력 시 어느 샤드에 할당할지
Data node : 데이터와 관련된 CRUD 노드
Ingest node : 사전처리 파이프라인 노드
Coordination only node : 대규모 클러스터에서 이점이 있음
샤딩 : 데이터를 나누어서 저장
구조 : Cluster[Node[Shard..]]
Cluster끼리는 데이터 교환 안됨
primary shard : 데이터 저장 하는 샤드
Replica shard : 복제용 샤드, 서로 다른 노드에 존재할 것을 권장
restful API를 통해 수행
CRUD Elasticsearch Restful
SELECT GET
INSERT POST
UPDATE PUT
DELETE DELETE
기본 api
curl -XPOST 'localhost:9200/victolee/blog/1?pretty' -d '{"postName" : "elasticsearch", "category" : "IT"}' -H 'Content-Type: application/json'
index : victolee
type : blod
_id : 1
========================
용어
pretty : 예쁘게 보여주기
@파일경로 : 파일을 insert
filter_path : 특정 컬럼만 표시
q : query string(sort, from, size)
========================
api
_cluster/health : 클러스터 정보
_cat/indices : indeces 정보
_cat/shards : 샤드 정보
_setting : 클러스터 setting
_search : 조회
_all/_search : 모든 documnet 검색
===============================
query
Query Context : 얼마나 일치하는지 _score로 나타냄
Filter Context : true / false 로 나타냄
match_all : 모두 가져오기
match_none : 모두 안가져오기
match : 그 단어가 들어가있는 것들은 가져옴
filter context
bool : true / false 로직 사용
must : bool must 절에 지정된 모든 쿼리가 일치하는 document를 조회
should : bool should 절에 지정된 모든 쿼리 중 하나라도 일치하는 document를 조회
must_not : bool must_not 절에 지정된 모든 쿼리가 모두 일치하지 않는 document를 조회
filter : must와 같이 filter 절에 지정된 모든 쿼리가 일치하는 document를 조회하지만, Filter context에서 실행되기 때문에 score를 무시합니다.
range : 범위 검색
gte : 크거나 같다.
gt : 크다.
lte : 작거나 같다.
lt : 작다.
boost : 쿼리의 boost 값을 셋팅합니다. ( 기본 값 1.0 )
term : 정확한 키워드가 포함된 document를 조회(full text 검색에는 좋지않다'정확한 것만 찾기 때문에'), full text는 match 사용하는게 좋다. 역색인될때 lowercase로 처리하기 때문에 Bond 같은 대문자 검색하면 검색되지 않는다
terms [] : 여러개 중 하나라도 존재하는 document 조회
regexp : 정확한 검색 , ".*street" (0개 이상의 자리수를 갖는 모든 문자열)
검색/가공
from : 페이징 쪽수
size : 한번에 나타낼 게시글 수
sort : 기본은 내림차순
_source : 원하는 필드만 가져옴