티스토리 뷰

개발/검색엔진

[SOLR] 용어들 정리

까매요~ ccambo 2014.12.23 18:44

Solr 를 사용하기 위해서는 몇 가지 용어들을 확인하고 이해해야 하기 때문에 간단하게 나름대로 정리하도록 한다. (현재 이해를 근거로 정리한 것이므로 향후 변경 또는 추가/삭제가 발생할 수 있다)

이 정리는 Solr Wiki의 Solr Teminology를 기준으로 한 것이다. 발 번역을 한 것 + 무작정 이해한 것이 덧붙여져 엉뚱한 내용도 많이 포함되어 있을 수 있으므로 원문을 검토해서 이해해야 한다. ㅠㅠ

SolrCloud

SolrCloud 를 구성한다면 아래의 용어들에 혼동을 느끼기 쉽기 때문에 별도로 구분해서 정리해 놓는다.

  • SolrCloud - Solr 에서 제공하는 분산 기능을 의미하고 고 가용성과 장애 복구 및 분산 인덱싱과 검색을 제공하는 아키텍처라고 이해하면 된다.
  • Cluster - 클러스터는 Solr를 구성하는 모든 노드들의 집합을 의미한다. 클러스터는 하나의 Solr 인덱스를 서비스하기 위한 구성을 가진다. 즉, 단일 schema.xmlsolrconfig.xml 을 공유한다.
  • Node - 노드는 클러스터에 포함되는 각 논리적 서버(Solr 가 서비스되는 JVM 인스턴스 단위) 를 의미한다. 물리적인 서버에 하나의 노드가 존재할 수도 있고, 여러 개의 노드가 존재할 수도 있다.
  • Partition - Solr 에서 관리하는 문서들을 특정한 단위 (일반적으로 Hash 기준으로 묶어서 처리) 로 분리한 하위 집합을 의미한다. 유사한 경우는 데이터베이스에서 하나의 대량 데이터를 가진 테이블을 여러 개의 세그먼트로 파티셔닝 하는 것과 같다.
  • 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를 통해서 각 코어간에 통신을 할 수는 있다. 초기 버전의 Solr 에서는 SolrCore 클래스가 싱글톤으로 단일 코어만을 지원하였지만, 다중 코어 지원이 되면서 이제는 싱글톤 방식이 아닌 리팩토링된 방식으로 운영된다. 코어의 구성은 일반적으로는 Solr 의 conf 폴더에 존재하지만 SolrCloud 환경에서는 ZooKeeper에 저장된다는 점이 다르다.
  • Leader - 마스터-슬레이브 구조가 아닌 리더-복제본 구조로 Shard를 구성하는 노드들 중에서 리더를 선출하는 프로세스가 존재하고 이 프로세스는 Solr 인스턴스가 다운되는 것과 같은 이벤트에 의해서 호출되고 이를 통해서 선출된 리더는 Shard 구성에 존재하는 다른 복제본들을 관리하는 기능을 수행한다. 따라서 문서가 인덱스되면 SolrCloud는 Shard 구성의 리더에게 관련된 정보를 전달하고 리더는 다른 모든 복제본들에 배포를 하게 된다.
  • Replica - 복제본은 Shard의 복사본으로 각 복제본은 Solr 의 코어로서 존재한다. 예를 들어 “test1” 이라는 이름의 컬랙션이 “numShards=1” 파라미터를 가지고 replicationFactor 가 2로 지정되어 생성되었다면 정확하게 2개의 복제본을 가지게 된다. 2개의 복제본은 각각 코어로 서로 다른 서버에 존재하게 된다. 하나는 “test1_shard1_replica1” 의 이름을 가지고 다른 하나는 “rest1_shard1_replica2” 라는 이름을 가지며, 둘 중에 하나가 리더가 된다.
  • Shard - 샤드는 컬랙션을 파티셔닝한 논리적인 조각을 의미하고 코어로 관리되는 인덱스 단위라고 생각하면 된다. 각 샤드는 하나 또는 그 이상의 복제본들로 구성되고 복제본들 중에서 하나를 리더로 설정한다.
  • ZooKeeper - 클러스터 실행을 지원하는 오픈소스 프로그램으로 SolrCloud는 ZooKeeper를 기본으로 사용하고 있다. Solr에는 기본적으로 ZooKeeper가 포함되어 있지만, Solr와는 별도로 독립적으로 ZooKeeper를 구성하여 운영하는 권장하고 있다. 그리고 최소한 3개의 호스트를 사용하여 문제발생에 대비하는 것을 권장하며, Solr 와 동일한 하드웨어서 동작할 수도 있지만 대부분의 경우는 별도로 운영한다.

General

  • Auto-Warming - Solr에서 어떤 작업이 처리가 되면 (새로운 Searcher가 생성되는 처리) 새로운 캐시를 생성하고 기존 캐시로 부터 많이 사용된 키들을 기반으로 새로운 캐시에 key/value 쌍으로 추가하는 작업을 의미한다.
  • DisMax - Disjunction Max 의 약자로 Solr의 기본 쿼리 파서는 문법적으로 올바르게 지정된 단일 필드에 대해서만 쿼리를 수행한다. 예를 들어 title:foo OR body:foo 와 같이 단순히 필드와 검색어를 매칭시켜줘야 처리가 가능하다는 것이다. 이에 반해서 DisMax 는 검색어를 최대한 분리하여 검색을 할 수 있도록 하는 가장 인기많은 검색 모드라고 생각하면 된다. eDisMax 는 DisMax를 더 확장한 것이다. 이를 통해서 사용자가 단순히 검색어만 입력 했을 때도 여러 개의 필드를 기준으로 분리해서 검색이 가능하도록 한다. 여러 필드는 “qf” 파라미터(Query Field) 를 통해서 설정하면 된다. “qf” 파라미터에는 각 필드와 필드에 대한 증진값 (boost 값???) 을 줄 수 있다. 예를 들면 “qf=title^10 content^9 … ” 처럼 지정한다.
    • Disjunction - 여러 필드들을 각각 분리해서 배타적으로 처리한다는 의미를 가진다.
    • Max - “foo” 라는 검색어가 title 과 body 필드에서 매치가 되었을 때 각각의 필드에 매치되는 스코어가 존재한다. 이 스코어들을 합산하는 것이 아니라 그 중에 큰 스코어로 검색된 결과의 스코어로 처리한다는 의미를 가진다. 현재는 거의 eDisMax 를 사용한다.
  • Facet - 객체에 대한 집합의 측면이나 별개의 기능을 의미한다. 단어적인 측면의 의미는 그렇지만 Solr에서 사용할 때의 의미는 검색 결과에 대한 분류 정도로 이해하면 된다. 예를 들어 “스마트폰”을 검색할 때 “삼성, LG” 등과 같이 회사 기준이라던지, “KT, SKT” 등과 같이 통신 업체 기준등으로 검색 결과를 좀 더 세분화해서 검색할 수 있도록 분류를 만드는 것이라고 이해하면 된다.
  • Field Collapsing - 검색 결과를 특정한 필드의 값으로 그룹화 하는 것을 의미한다. 예를 들면 “스마트폰”을 검색했을 때 결과를 가격대별로 그룹처리하여 보여줄 수 있다고 이해하면 된다.
  • Filter - 검색결과를 필터링하는 것으로 검색 Score에 영향을 주지 않으면서 결과에서 특정한 데이터를 제외하는데 사용한다. “fq” 파라미터를 사용해서 설정한다.
  • NRT - Near Real Time 의 약자로 거의 실시간이라고 이해하면 된다. 즉 문서가 추가/변경/삭제가 되었을 때 거의 즉시로 클라이언트에 보여줄 수 있도록 하는 것을 의미한다. 주로 Soft Commit 과 연관되어 이해가 필요하다.
  • Request Handler - Solr 에서 외부로부터의 요청을 처리하는 모든 핸들러를 의미한다. solrconfig.xml 파일에 사용할 Request Handler들이 정의되어 있고 Request Handler는 사용할 Component들을 정의하고 있다. 예를 들어 DisMaxRequestHandler 는 DisMax Query Parser Component fmf tkdydgkesk.
  • QTime - Solr 엔진이 처리에 소요한 밀리초 단위의 시간으로 요청이 도착해서 요청이 끝난 시간이다. 정확하게는 요청이 도착해서 요청을 처리할 SolrQueryRequest 객체가 생성된 시점을 시작으로 요청이 종료되는 시간까지의 소요 시간이다. 따라서 결과를 클라이언트로 보내기 위한 포맷처리나 Response Writing 등의 시간은 제외된 시간이다.
  • Query Parser - 검색을 처리하기 위해서 전달될 요청에서 검색어(Term) 와 검색에 연관된 파라미터들을 파싱하는 컴포넌트를 의미한다.
  • Searcher - Searcher는 SolrIndexSearcher의 인스턴스를 의미하며, 이 클래스는 인덱스에 대한 검색을 수행하며, 여러 가지 캐시들을 관리하는 역할을 담당한다. 각 코어당 하나의 Searcher가 존재하고 Core에 대한 요청을 전담한다. 인덱스 변경등에 따른 Commit 등의 발생으로 인해서 새로운 Searcher가 생성이 된다. 그러나 실제 사용되지는 않고 NRT 기능을 위해서 Cache Warming 이라는 기간 (새로운 Searcher 가 서비스를 할 수 있도록 기존 Searcher의 캐시들을 새로운 Searcher의 캐시로 이동하는 작업등의 처리를 수행하는 시간) 가진다. 이 기간 동안에 발생하는 요청들은 기존의 Searcher가 계속 담당을 하고 Warming 이 끝나면 기존의 Searcher는 종료되고 새로운 Searcher가 요청을 처리하게 된다.
  • Solr Home Dir - Sollr Home Directory 또는 Solr Home 이라고 말하며, Solr 구성 파일, 데이터, 플러그인들을 찾는 기준 디렉토리를 의미한다. 기본 설정 값은 “./solr” 이다. Solr 를 실행할 때 “-Dsolr.solr.home=<path of solr home directory>” 속성을 통해서 지정한다. 자세한 내용은 다운로드한 Solr 의 example 폴더에서 readme.txt 파일을 참조하면 된다.
  • Static Warming - Solr의 QuerySenderListener 클래스가 수신하는 “newSearcher” 나 “firstSearcher” 이벤트가 발생했을 때 강제로 Query를 수행하여 캐시가 준비될 수 있도록 solrconfig.xml 에 정의한 질의라고 이해하면 된다. 즉, Auto-Warming 이 기존 Searcher의 캐시를 기준으로 하는 것에 반해서 Static Warming은 이전 Searcher와는 상관없이 Searcher가 생성되는 경우에 무조건 필요한 캐시를 준비할 수 있도록 필요한 질의를 내부적으로 처리하는 것이라고 생각하면 된다.
댓글
댓글쓰기 폼