검색엔진 비교_Solr vs ElasticSearch

안녕하세요.

검색엔진을 개발하는 이슈가 생겨 현재의 인프라 환경에 적합한 오픈소스를 찾다 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

 

 

 

New Multi-Channel Dynamic CMS