<aside> 💡
Elasticsearch 설치 + 기본 사용 방법
</aside>
개발을 하다 보면 텍스트 검색 기능이 꼭 필요한 순간이 온다. 특히 게시글, 댓글, 상품명 등 다양한 텍스트 데이터를 효율적으로 검색하려고 PostgreSQL의 Full-Text Search(FTS)를 사용해봤는데, 한 가지 큰 문제가 있었다.
PostgreSQL FTS는 기본적으로 to_tsvector와 to_tsquery를 통해 텍스트를 토큰화하고 검색 쿼리를 수행한다. 하지만 이 기능은 영어와 라틴계 언어와 같은 띄어쓰기가 명확한 언어에는 적합하지만, 형태소 분석이 중요한 한국어에는 한계가 있다.
예를 들어,
"검색하다"라는 텍스트는 "검색"이라는 단어로는 검색되지 않는다.한글 텍스트 검색에 대해 더 정밀하고 유연한 검색 기능이 필요하다면 Elasticsearch는 훌륭한 대안이 될 수 있다.
| 항목 | 설명 |
|---|---|
| 종류 | 오픈소스 검색 엔진 (Apache Lucene 기반) |
| 기능 | 빠른 검색, 자동완성, 오타교정, 필터링, 정렬, 시각화, 로그 분석 |
| 구조 | 분산형, 확장 가능, 실시간 색인/검색 가능 |
| 연동 | PostgreSQL, MySQL, MongoDB, Kafka 등과 연동 가능 |
| 사용처 | GitHub, Netflix, Uber, Shopify, Wikipedia 등 |
| 항목 | PostgreSQL FTS | Elasticsearch |
|---|---|---|
| 기본 언어 지원 | ||
| 영어/라틴어 중심 | ||
| 다양한 언어(한국어 포함) | ||
| 형태소 분석기 | ||
| 제한적 (예: simple, english) | ||
| 다양한 형태소 분석기 (예: Nori, Arirang 등) | ||
| 커스터마이징 | ||
| 비교적 어려움 | ||
| 매우 유연, custom analyzer 설정 가능 | ||
| 검색 정확도 | ||
| 낮음 (한국어 기준) | ||
| 높음 (동의어, 복합어 처리 등 가능) | ||
Elasticsearch는 오픈소스 분산 검색 엔진이고, 다양한 언어에 맞는 **형태소 분석기(analyzer)**를 제공하는 게 가장 큰 장점이다. 특히 한국어의 경우 Nori 형태소 분석기를 제공해서 다음과 같은 이점이 있다: