Elasticsearch
Apache Lucene
기반의 오픈소스 검색엔진
Apache Lucene
이 Java
로 개발되어 있다 보니, Elasticsearch
로 Java로 개발 됨
특징
오픈소스
elastic
제품들은 오픈소스로 제공되며, 깃 헙 저장소에 소스를 공유하고 있다.
역정규화 (inverted index)
RDB는 테이블 형태로 데이터를 저장하며, 열을 기준으로 인덱스를 생성한다.
검색 시에는 like
검색을 하여 한 줄씩 검사하여 결과값을 가지고 온다.
하나씩 검사하다 보니 데이터가 많아질수록 속도가 점점 느려진다는 단점이 있다
반면, elasticsearch
는 텍스트를 모두 뜯어 검색어 사전을 만든다.
- 검색어의 기본 단위를 Term이라 부름
Term을 기준으로 doc의 인덱스를 가리킨다. 이렇게 RDB와는 반대 구조를 가지기 때문에 역정규화(inverted index)라 한다
term을 이용하여 검색하다 보니 굉장히 빠른 속도로 검색할 수 있는 장점이 있다
풀 텍스트 검색이 가능
위 내용처럼 elasticsearch는 역정규화 방식으로 데이터를 색인하여 저장한다. 그리고 이렇게 가공된 텍스트를 검색하는데 이를 풀 텍스트 검색 (Full Text Search
)라고 함
검색 최적화
elasticsearch
에서는 삽입/수정과 같은 작업은 비싼 비용을 가진 작업이다.
elasticsearch
는 검색에 최적화되어 있어서 방대한 양의 데이터를 신속하게 검색하기 좋다. 그래서, 특징을 잘 이해하고 검색이 많은 서비스에 사용하는 것이 좋다
실시간 분석
거의 실시간에 가까운 속도로 색인된 데이터의 검색이 가능
RDBMS vs 검색엔진(elasticsearch)
구분 | RDBMS | 검색엔진(elasticsearch) |
데이터 저장 방식 | 정규화 | 역정규화 |
전문(Full Text) 검색 속도 | 느림 | 빠름 |
의미 검색 | 불가능 | 가능 |
join | 가능 | 불가능 |
수정 / 삭제 | 빠름 | 느림 |
텍스트 분석 과정
STEP 1. Whitespace Tokenizing
빈 공백(스페이스)을 기준으로 Tokenizing
을 한다.
STEP 2. 대문자를 소문자로 변환
대/소문자 상관없이 검색하기 위해 소문자로 변환하는 작업을 한다.
STEP 3. 불용어(stopwords) 처리
의미상 가치가 없는 단어들을 제거한다.
- example: the, a, an, to, for, at, be, but, by, i, no, the... 등등
STEP 4. 형태소 분석 ~s, ~ing 등을 제거
- jumpin → jump
- jumps → jump
- lazy → lazi happy → happi (happiness와 같은 단어도 검색이 되도록 하기 위해)
STEP 5. 동의어 처리
Synonym Token Filter
를 이용해 동의어 사전을 정의
다른 글
2021/01/22 - [ETC] - MacOSX 에 ElasticSearch 설치하기 (Homebrew 사용)
Reference
'ETC' 카테고리의 다른 글
Virtual Box에 Ubuntu 20.04 VM 생성하기 (0) | 2021.02.18 |
---|---|
vscode에서 prettier가 적용되지 않는 경우 (defualt formatter, format on save 설정) (0) | 2021.02.15 |
MacOSX 에 ElasticSearch 설치하기 (Homebrew 사용) (0) | 2021.01.22 |
Git 계정 변경, fatal: Authentication failed for (0) | 2021.01.19 |
MacOS에 Httpie 설치하기 (Homebrew 이용) (0) | 2020.12.02 |