<aside> 💡

Elasticsearch 설치 + 기본 사용 방법

</aside>

[1] 개요

개발을 하다 보면 텍스트 검색 기능이 꼭 필요한 순간이 온다. 특히 게시글, 댓글, 상품명 등 다양한 텍스트 데이터를 효율적으로 검색하려고 PostgreSQL의 Full-Text Search(FTS)를 사용해봤는데, 한 가지 큰 문제가 있었다.

(1) PostgreSQL FTS의 한계 (특히 한국어)

PostgreSQL FTS는 기본적으로 to_tsvector와 to_tsquery를 통해 텍스트를 토큰화하고 검색 쿼리를 수행한다. 하지만 이 기능은 영어와 라틴계 언어와 같은 띄어쓰기가 명확한 언어에는 적합하지만, 형태소 분석이 중요한 한국어에는 한계가 있다.

예를 들어,

한글 텍스트 검색에 대해 더 정밀하고 유연한 검색 기능이 필요하다면 Elasticsearch는 훌륭한 대안이 될 수 있다.


1) Elasticsearch란?

항목 설명
종류 오픈소스 검색 엔진 (Apache Lucene 기반)
기능 빠른 검색, 자동완성, 오타교정, 필터링, 정렬, 시각화, 로그 분석
구조 분산형, 확장 가능, 실시간 색인/검색 가능
연동 PostgreSQL, MySQL, MongoDB, Kafka 등과 연동 가능
사용처 GitHub, Netflix, Uber, Shopify, Wikipedia 등

2) PostgreSQL FTS vs Elasticsearch (한글 검색 기준)

항목 PostgreSQL FTS Elasticsearch
기본 언어 지원
영어/라틴어 중심
다양한 언어(한국어 포함)
형태소 분석기
제한적 (예: simple, english)
다양한 형태소 분석기 (예: Nori, Arirang 등)
커스터마이징
비교적 어려움
매우 유연, custom analyzer 설정 가능
검색 정확도
낮음 (한국어 기준)
높음 (동의어, 복합어 처리 등 가능)

(2) Elasticsearch의 장점

Elasticsearch는 오픈소스 분산 검색 엔진이고, 다양한 언어에 맞는 **형태소 분석기(analyzer)**를 제공하는 게 가장 큰 장점이다. 특히 한국어의 경우 Nori 형태소 분석기를 제공해서 다음과 같은 이점이 있다: