유용한 정보

검색엔진 비교_Solr vs ElasticSearch

CyberI 2020. 3. 19. 12:57

안녕하세요.

검색엔진을 개발하는 이슈가 생겨 현재의 인프라 환경에 적합한 오픈소스를 찾다 Apache Lucene을 알게 되었고, 개발하게 되었습니다.

그리고, Lucene을 적용하기 위해 레퍼런스와 여러 문서들을 찾으면서, 새로운 의문점들이 생겨났습니다.

 

정말 이 검색엔진이 가장 좋은가?

성능 면에서 어떤 검색엔진 오픈소스가 더 뛰어난가?

어떤 검색엔진 오픈소스가 관리하거나 구축하기 쉬운가?

 

해당 질문에 대해 항상 명확하고 적용 가능한 답변이 있는 것은 아니지만 어느 목적으로 사용하느냐에 따라 보다 나은 혹은 올바른 선택을 하는데 도움이 될 것입니다.

 

Lucene를 이용하여 검색엔진을 개발을 완료한 지금 뭔가 더 좋은 검색엔진으로 업그레이드 하고 싶은 욕심이 생겨 다시 비교분석을 해보게 되었습니다.

 

출처 : https://db-engines.com

위 순위는 검색포털 사이트(goolgle, bing 등) 검색 횟수/빈도와 IT 커뮤니티(StackOverflow, DBA Stack Exchange 등) 관련 질문 수와 관심 있는 사용자 수 등으로 측정된 검색엔진 순위입니다.

 

독립적으로 Apache Lucene만을 사용하여 검색엔진을 구현하는 것은 어렵습니다. 그래서 대부분은 검색엔진의 기본적인 기능이 구현되어 있는 오픈소스를 주로 사용합니다.

상위 3개의 검색엔진 중 유료로 제공되는 Splunk를 제외한 Elasticsearch와 Solr에 대한 비교를 진행하도록 하겠습니다.

 

두 검색엔진 오픈소스 모두 Apache Lucene을 기반으로 구축되었지만 속도, 확장성, 배포용이성 등과 같은 기능면에서 차이점이 존재합니다.

 

Elasticsearch는 로그 분석, 모니터링, 위치 기반 정보 데이터 분석 및 시각화화 같은 사례에 더 적합하고 자주 사용되며, Solr는 캐시, 전자 상거래와 같이 패킷 및 정렬에 역변환 되지 않은 정적 데이터와 관련하여 더 많은 이점이 있습니다.

 

아래는 검색엔진의 대표적인 기능인 인덱싱, API, 검색에 대해 두 오픈소스를 비교해보았습니다.

 

- 검색엔진의 대표적 기능에 대한 비교

 

1. 인덱싱

  Elasticsearch 5.* Solr 6.* 비고

Data Import

JDBC, Amazon SQS, CouchDB, Git, MongoDB, Redis, RSS, SVN, Twitter 등

JDBC, XML, URL, FileSystem 등

Elasticsearch가 더 다양한 형식에서 데이터를 가져올 수 있도록 기능이 구현되어 있음

수정

수정 데이터만 재색인

전체 재색인

데이터 수정이 자주 발생할 경우 Elasticsearch가 유리

실시간 인덱싱

인덱싱 직후 검색 가능

인덱싱 후 가까운 시간 내 검색 가능

두 오픈소스 모두 실시간 검색이 가능하나 인덱싱 속도는 Elasticsearch가 빠름

스키마 변경 변경시 즉시 적용 변경시 재가동 후 적용

스키마 변경이 잦다면 Elasticsearch를 활용

 

2. API

  Elasticsearch 5.* Solr 6.* 비고
호출타입 JSON XML, CSV, JSON  
JAVA API TransportClient SolrJ  
공식 지원 언어 Go, Haskell, Java, Javascript, .Net, PHP, Python 등 Java  
output 타입 JSON, XML, HTML JSON, XML, PHP, Python, ruby, csv 등 Elasticsearch는 플러그인 설치로 타입 추가 가능

 

3.검색

  Elasticsearch 5.* Solr 6.* 비고
Query DSL 지원 지원하지 않음 Elasticsearch가 Solr보다 다양한 기능의 쿼리 지원
인덱스간 조인 지원하지 않음 지원  
검색 속도 Elasticsearch > Solr  
장문 Text 검색 속도 Elasticsearch > Solr  

 

위 내용을 참조하면 어떤 검색엔진 오픈소스를 사용하는 것이 좋을지 선택하는데 도움이 될 것입니다.

 

아래 이미지는 제가 실제 구축한 Solr 검색엔진 플랫폼입니다.

당시 Solr 검색엔진을 선택한 몇 가지의 이유를 말씀드리겠습니다.

 

1. Elasticsearch 보다 상대적으로 안정적인 검색엔진

2. 검색엔진에 활용될 데이터들이 주로 장문의 Text로 구성

- 활용할 데이터들이 CLOB 데이터 타입이나 크롤링으로 가져오는 Text이며 Indexing 작업이나 스키마 수정이 잦지 않으므로 Solr에 더 적합하다고 판단하였습니다.

 

Solr 검색엔진을 운영하며 느낀 점은 빠른 검색 속도와 높은 안정성(검색 요청 시나 인덱스 작업 시 간단한 오류는 무시) 등이 상당히 만족스러웠습니다. 하지만 결과내 검색이나 Multi Index 검색 등을 지원하지 않아 아쉬움을 느꼈습니다.

 

 

 

 

 

출처

- https://www.elastic.co/kr/

- https://lucene.apache.org/solr/

- https://sematext.com/blog/solr-vs-elasticsearch-differences/

- http://solr-vs-elasticsearch.com