[Apache Solr] Solr 검색엔진이란 ?

nooyji·2022년 7월 5일
1
  1. Solr 검색엔진이란 ?
  • Solr 은 오픈소스 기반의 검색 플랫폼이다. 아파치 Lucene 프로젝트에서 파생되었으며, 자바언어로 작성되었다. 주요 특징은 full-text 검색, 조회 수에 따른 하이라이팅, 패싯 검색, 실시간 인덱싱, 동적 클러스터링, 데이터베이스 통합, NoSQL의 기능, 다양한 문서(word, PDF 등) 를 핸들링 하는 것이다.
    분산 검색 및 인덱스 복제를 지원하며, 확장성과 내결함성을 위하여 설계되었다.
    Solr 는 검색과 분석을 위하여 폭넓게 활용할 수 있으며, 개발 커뮤니티를 통해 계속적으로 업데이트 되고 있다.

  • Solr 는 독립적인 Full-text 검색 서버로 실행된다. 루씬의 자바 검색 라이브러리를 사용하여 full-text 인덱싱과 검색을 지원한다. 또한, REST 와 유사한 HTTP/XML, JSON API 를 사용하기 때문에, 대부분의 프로그래밍 언어에 활용할 수 있다.
    Solr 의 외부설정을 사용하면, JAVA 코딩 없이 사용하고자 하는 응용프로그램에 적용할 수 있으며, 고급 사용자 정의를 지원하는 플러그인 아키텍처가 있다.

  • Lucene 과 solr 는 모두 Apache Software Foundation 개발팀에서 기획되었고, 2010 년에 병합되었다. 현재는 Lucene/Solr 또는 Solr/Lucene 으로 부른다.

  1. Solr 검색엔진을 사용할 때, 필수적으로 알아야 할 용어
  • 일반

Auto-warming : Solr 에서 어떤 작업이 처리가 되면 (새로운 Searcher 가 생성되는 처리) 새로운 캐시를 생성하고 기존 캐시로부터 많이 사용된 키들을 기반으로 새로운 캐시에 key/value 쌍으로 추가하는 작업을 의미한다.

Facet : 검색 결과에 대한 분류. 검색 결과를 세분화하여 검색할 수 있도록 분류를 만드는 것

Field Collapsing : 검색 결과를 특정한 필드의 값으로 그룹화 하는 것.
예를 들면 "스마트폰" 을 검색했을 때, 가격대 별로 그룹화하여 보여줄 수 있다.

Filter : 검색결과를 필터링하는 것으로 검색 Score 에 영향을 주지 않으면서 결과에서 특정한 데이터를 제외하는데 사용한다.
fq 파라미터를 이용하여 설정한다.

Core : 모든 Solr 설정과 함께하는 루씬 인덱스의 실행중인 인스턴스. 단일 Solr 어플리케이션은 isolation 아래에 0 또는 더 많은 코어를 가지지만, 각자가 필요에 따라 CoreContainer 를 통해 커뮤니케이션을 할 수 있다.

NRT : Near Real Time 의 약자이다. 즉 문서가 추가/변경/삭제가 되었을 때 지연을 최소화하여 클라이언트에 보여줄 수 있도록 하는 것을 의미한다. 주로 Soft Commit 과 연관되어 이해가 필요하다.

Request Handler : Solr 에서 외부로 요청을 처리하는 모든 핸들러. solrcconfig.xml 파일에 정의되어 있다.

QTime : Solr 엔진이 쿼리를 처리하는 데에 소요한 시간을 밀리초 단위로 보여준다.

Query Parser : 검색을 처리하기 위하여 전달받은 쿼리에서 검색어와 그에 연관된 파라미터들을 파싱하는 컴포넌트

Searcher : SolrIndexSearcher 의 인스턴스를 의미한다. 인덱스에 대한 검색을 수행하며, 여러가지 캐시들을 관리한다.

Solr Home Dir : Solr 의 구성파일, 데이터, 플러그인 등을 찾는 기준 디렉토리를 의미한다.
Solr 를 실행할 때 "-Dsolr.solr.home= < path of solr home directory >" 속성을 통해서 지정할 수 있으며, 기본값은 ./solr 이다.

Static Warming : Solr 의 QuerySenderListener 클래스가 수신하는 "newSearcher" 나 "firstSearcher" 이벤트가 발생했을 때 강제로 Query 를 수행하여 캐시가 준비될 수 있도록 solrconfig.xml 에 정의한 질의이다.
즉, Auto-Warming 이 기존 Searcher 의 캐시를 기준으로 하는 것에 반해서 Static Warming 은 이전 Searcher 와는 상관없이 Searcher 가 생성되는 경우에 무조건 필요한 캐시를 준비할 수 있도록 필요한 질의를 내부적으로 처리하는 것이다.

  • SolrCloud

SolrCloud : Solr 에서 제공하는 분산 기능을 의미하고 고가용성과 장애 복구 및 분산 인덱싱과 검색을 제공하는 아키텍처

Cluster : 클러스터는 Solr 를 구성하는 모든 노드들의 집합을 의미한다. 단일 scheme.xml 과 solrconfig.xml 을 공유한다.

Node : 노드는 클러스터에 포함되는 각 논리적 서버 (Solr 가 서비스되는 JVM 인스턴스 단위) 를 의미한다.
서버 하나에 한 개 또는 그 이상의 노드가 존재할 수 있다.

Partition : 정한 단위 (일반적으로 Hash 기준으로 묶어서 처리) 로 분리한 하위 집합을 의미한다.
일반적인 DB 에서 테이블 하나를 여러 개의 세그먼트로 나누는 것과 같다.

Collection : 컬렉션은 SolrCloud 클러스터에서 관리되는 논리적인 인덱스를 의미한다.
이 컬렉션은 하나 또는 그 이상의 Shard 로 구성되고 설정 세트 (Config Set) 와 연관되어 있다.
이 때 하나 이상의 Shard 로 구성된 것을 분산 인덱스라고 한다.
보통은 이 컬렉션의 이름을 참조해서 분산 검색에 필요한 각 Shard 에 대한 관리용 파라미터로 사용한다.

Config Set : 코어가 정상적으로 동작하는데 필요한 파일들을 의미한다.
각 설정 세트는 식별하기 위한 이름을 가지고, 최소 구성은 schema.xml 과 solrconfig.xml 이지만 구성되는 내용에 따라서 추가적인 파일들이 존재할 수도 있다.
이 설정 세트는 Zookeeper 에 저장되고 Zookeeper Command Line Interface 를 통해서 관리하거나 Solr 를 시작할 때 bootstrap_confdir parameter 를 지정할 수도 있다.

Core : 코어는 일반적으로 Lucene Index 를 실행하기 위한 구성 (schema.xml, solrconfig.xml) 을 가지고 서비스를 하는 인스턴스를 의미한다.
보통 단일 Solr 어플리케이션은 0 또는 복수의 코어를 구성할 수 있으며, 각 코어는 독립적으로 실행된다.
경우에 따라서 CoreContainer 를 통해서 각 코어간에 통신을 할 수는 있다.

Leader : Shard 구성에 존재하는 다른 복제본들을 관리하는 기능을 수행한다.
따라서 문서가 인덱스되면 SolrCloud 는 Shard 구성의 리더에게 관련된 정보를 전달하고 리더는 다른 모든 복제본들에 배포를 하게 된다.

Replica : Shard 의 복사본으로 각 복제본은 Solr 의 코어로서 존재한다.
numShards = 1 일 때, replicaFactor 가 2로 지정되어 있으면 2개의 복제본을 가지게 된다. 2개의 복제본은 각각 다른 서버에서 코어로 존재한다.

Shard : Collection 을 파티셔닝한 논리적인 조각을 의미. Core 로 관리되는 인덱스 단위이다.

Zookeeper : 클러스터 실행을 지원하는 오픈소스 프로그램. 대부분의 경우 Solr 와 다른 하드웨어에서 별도로 운영한다.

원문 : https://fathory.tistory.com/3

0개의 댓글