개발/ElasticSearch

elasticsearch 기본

반응형

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 : 원하는 필드만 가져옴

반응형