당연히 ES에서도 RDB와 같이 Text, INT, LONG, DOUBLE ,Boolean 등의 다양한 데이터 타입을 가지고 있다. 그중 가장 중요하게 살펴볼 것은 text와 keyword 타입인데 이것에 대해서 먼저 정리해보도록 한다. 1. text type vs keyword type : 무슨차이일까? text와 keyword 둘다 문자열을 나타내기 위한 타입이지만 서로 다른 목적을 가지고 토큰이 생성된다. 1) Keyword Type keyword type은 Exact Matching을 위해 토큰이 생성된다. 어떠한 text data를 index에 저장할 때 indexing이 당연히 일어날 것이고 이때 keyword라는 타입으로 저장을 하겠다고 설계했다면 오른쪽과 같이 토큰이 생성된다. 반면 텍스트..
ES에서 적절한 샤드를 설정할 때 크게 고려해야할 것은 바로 색인(Indexing)성능과 검색(search)성능이다. 1. Indexing (데이터 적재) 성능 고려하기 이전 포스팅에서 ES에 데이터를 적재할 떄 색인(Indexing)이라는 작업을 하게되는데 이때 가장 CPU를 가장많이 잡아먹는 작업이 바로 Analyzer를 통해서 document를 분석하하고 inverted Index를 생성하는 작업이고 이것이 바로 ES에서의 Indexing이라고 하였다. 그러면 여기서 의문점이 생길 수 있을 것이다. indexing이 끝나서 프라이머리 샤드에 데이터를 저장하면 저장한 내용을 레플리카 샤드에도 반영해야하기 때문에 당연히 레플리카 샤드가 많아질 수록 색인성능을 저하시키지 않을까? 라고 생각해볼 수 있다...
ES의 검색과정에서 가장 중요하게 알고 있어야할 개념은 바로 'Inverted Index'이다. ES에서의 검색과정은 위와 같이 어떤 검색어가 들어오면 해당 검색어를 분석하고 그 검색어를 inverted Index 내에서 검색하여 그 결과를 표시해준다. 그럼 이 Inverted Index란 무엇일까? Inverted Index ES에서 Inverted Index란 문자열을 분석하고 난뒤 그 결과를 저장하고 있는 구조체를 말한다. 위 그림을 보면 현재 document 2개가 저장되어있는데 book이라는 문자열은 document 두개 모두 가지고 있기에 오른쪽 표와 같이 book 토근에 1,2 이렇게 구조화하여 저장할 수 있다. 또 kernel 이라는 문자열은 첫번재 document만 가지고 있기에 kern..
색인(Indexing)이란 문서를 분석하고 그것을 Storage에 저장하는 이러한 일련의 과정을 색인(Indexing)이라고 한다. RDB에서의 Indexing이라는 개념은 테이블의 동작속도를 높여주기위한 자료구조를 말하기에 RDB의 Idexing과는 차이가 있다. 이러한 색인(Indexing)과정은 프라이머리 샤드에서 일어나기 때문에 적절한 샤드의 개수 설정은 색인 성능(데이터 적재)에 많은 영향을 준다. 따라서 적절한 샤드의 개수가 색인(데이터 적재)성능을 향상시키는데 많은 영향을 끼친다.
ES에서의 인덱스(Index)란? ES에서의 Index는 RDB에서의 DB와 비슷한 개념으로 볼 수 있다. 즉 인덱스란 문서가 저장되는 논리적인 공간을 의미한다. 따라서 인덱스를 설계하는 것이 ElasticSearch를 사용하기 위해 고려해야하는 첫번째 단계이다. ES를 통해 로그를 수집하던 검색엔진으로 사용하던 문서들을 어떤 인덱스에 어떻게 저장할지 설계하는 것이 가장 중요하다. 도서관 자료 검색 시스템을 설계해야하는 상황을 가정해보자 그럼 위 그림과 같이 하나의 인덱스에 모든 자료를 저장하는 방법이 있을 수 있고 또는 도서관에서 관리하는 자료의 종류에 따라서 인덱스를 나누어서 저장할 수 도 있다. 따라서 사용패턴과 문서의 특성에 따라 알맞게 설계해야한다. 샤드(Shard)란? 문서가 저장되는 논리적인..
ES에서 mapping이란 RDBMS에서의 스키마와 비슷한 개념으로 볼 수 있는데 즉 문서의 구조를 나태내는 정보이다. ES는 스키마리스(schemaless)라는 특징이 있어서 스키마가 없어도 된다고 오해할 수 있는데 스키마가 없어도 되는 것이아니라 미리 정의하지 않아도 되는 즉 동적으로 스키마를 구성할 수 있다는 장점이 있는 것이다. 그래서 매핑의 종류는 2가지가 존재한다. 1. 동적 매핑 : 처음 색인되는 문서를 바탕으로 매핑 정보를 Elasticsearch가 자동으로 생성해줌 2. 정적 매핑 : 개발자나 엔지니어가 문서의 매핑 정보를 미리 정의해놓고 사용 Mapping 정보가 생성된 후 알고 있어야할 것 1. 동적매핑이던 정적 매핑이던 매핑 정보가 생성된 후에는 타입이 안맞은 경우 파싱에러가 발생한..