안녕하세요.
검색엔진을 개발하는 이슈가 생겨 현재의 인프라 환경에 적합한 오픈소스를 찾다 Apache Lucene을 알게 되었고, 개발하게 되었습니다.
그리고, Lucene을 적용하기 위해 레퍼런스와 여러 문서들을 찾으면서, 새로운 의문점들이 생겨났습니다.
정말 이 검색엔진이 가장 좋은가?
성능 면에서 어떤 검색엔진 오픈소스가 더 뛰어난가?
어떤 검색엔진 오픈소스가 관리하거나 구축하기 쉬운가?
해당 질문에 대해 항상 명확하고 적용 가능한 답변이 있는 것은 아니지만 어느 목적으로 사용하느냐에 따라 보다 나은 혹은 올바른 선택을 하는데 도움이 될 것입니다.
Lucene를 이용하여 검색엔진을 개발을 완료한 지금 뭔가 더 좋은 검색엔진으로 업그레이드 하고 싶은 욕심이 생겨 다시 비교분석을 해보게 되었습니다.
위 순위는 검색포털 사이트(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://lucene.apache.org/solr/
- https://sematext.com/blog/solr-vs-elasticsearch-differences/
- http://solr-vs-elasticsearch.com
'유용한 정보' 카테고리의 다른 글
AWS를 이용한 서버 구축2_아마존 EC2로 구축하기 (0) | 2019.09.03 |
---|---|
AWS를 이용한 서버 구축1 (0) | 2019.09.03 |
성능 TEST를 위한 보고서 3 (0) | 2019.07.09 |
성능 TEST를 위한 보고서 2 (0) | 2019.06.28 |
성능 TEST를 위한 보고서 1 (0) | 2019.06.18 |