2007년 8월 13일 월요일

검색 엔진 3 - 검색 엔진 구조도

IR 그룹의 하얀 눈길 님께서 작성하신 글입니다.

원문은 여기를 누르시면 볼 수 있습니다.

참고로 그림은 원문에서 찾을 수 없어서 이미지 검색을 통해서 얻은 그림으로 대치되었습니다.
따라서 원래 이미지와 맞지 않는 쌩뚱맞는 것일수도 있지만, 읽어본 결과 맞는 것 같습니다.






골치아픈 검색 모델을 잠시 접어두고 일단 시스템 구조가 어떻게 되어 있는지 구경해 보도록 하겠습니다. 아주 일반적인 사항이므로 대부분의 검색엔진들이 이러한 모양새를 갖추고 있다고 보면 되겠네요.

단, 아래 그림의 저작권은 제게 있으므로 함부로 도용하지 마시길..
=============================================================================
검색엔진 구조도





그림의 좌측을 보면 index target이 있습니다. 여기에는 html, 상용DB, 일반문서, 기타 여러 형식의 문서들이 존재할 수 있습니다. 이중 html문서들은 일반적으로 웹로봇을 통해 수집합니다. index target을 검색엔진이 색인하여 검색서비스를 제공하기 위한 기본 데이타들입니다.
index target들은 특정한 필터들을 통해 검색엔진에서 인지할 수 있는 일반적인 형태의 텍스트 문서로 변환합니다. 저는 이러한 작업을 하는 녀석을 dumper라고 이름 붙였습니다. 이 dumper가 각 문서의 형식에 맞는 필터들을 가지고 있어서 html은 html parser를 호출해서 F-TXT를 만들고 doc는 doc 필터를 통해, hwp는 hwp 필터를 통해 F-TXT를 만듭니다.
F-TXT는 형식화된 문서라는 의미로 formated-text라고 불렀습니다. F-TXT가 생성되고 나면 비로소 검색엔진의 색인 시스템이 인식할 수 있는 기본 문서들이 완성된 것입니다.
물론 F-TXT 로 변환하지 않고 색인기가 직접 필터를 가지고 문서들을 분석하여 색인할 수 있습니다. 이것은 단순히 구현의 차이이지요.
아래에 있는 스케쥴러는 주기적으로 변경되는 문서들을 색인하기 위한 것입니다. 웹문서라면 보통 보름에서 한달, 다른 컬렉션의 경우 서비스 용도에 맞게 하루 또는 여러방식으로 색인 주기를 설정할 수 있겠지요. 이런 작업을 스케쥴러가 총괄하게 될 것입니다.
Indexer에서 빼 놓을 수 없는 것이 형태소분석기입니다. 물론 형태소분석기가 없다고 하더라고 검색엔진 구성은 가능합니다. 색인 텀(term, 키워드)을 어떻게 생성할 것인가에 따라 형태소 분석기는 사용될 수도 있고 아닐 수도 있습니다. 한글 정보검색시스템에서는 형태소분석기에 따라 성능차이가 많이 나기 때문에 거의 대부분 선호하고 있습니다.
indexer는 형태소분석기를 통해 색인 텀을 생성하고 생성된 텀에 대해 문서번호와 함께 특수한 자료구조로 저장합니다. 보통 index db라고 쉽게 말하기도 하는데요. 역화일(도치 파일이라고도 합니다)이라는 구조로 색인 정보들을 저장합니다.
이렇게 역화일에 분석되어 저장된 문서는 검색기에 의해 검색이 이루어집니다.

색인기 부분을 보면 cache generator라는 것이 있습니다. 이것은 특수한 검색질의 같은 경우 연산시간이 너무 오래 걸릴 수 있기 때문에 미리 캐쉬로 만들어 두면 아주 좋은 속도를 낼 수 있습니다. 그래서 이런 모듈을 사용하여 캐쉬정보를 생성합니다. 캐쉬는 다양한 방법으로 구현할 수 있습니다만 보통 정적색인컬렉션이라면 웹서버에 검색결과 페이지 자체를 미리 만들어 두는 방법이 유용합니다.
로그서버는 검색어로깅 및 시스템 로깅을 위해 사용합니다.
요약서버는 별도로 구성하는 경우는 드믈며 색인기에서 역화일을 생성하면서 같이 만들어 두고 검색기에서 직접 읽는 방법을 많이 씁니다.
저같은 경우 위 그림을 만들면서 실험적으로 요약서버를 분리하여 테스트해 봤습니다.
생각외로 성능이 좋았습니다. 이유는 역화일과 요약정보가 하나의 서버에 존재하게 되면 disk i/o 버틀렉이 발생하여 역효과를 발생시켰었습니다. 그래서 서버를 분리하여 이 부분을 해소했었습니다.

위 그림은 일반적인 엔진의 모습이며 실제 응용에 들어가게 되면 많은 부분이 달라질 수 있습니다. 서비스별로 특수한 엔진을 만드는 것이 바람직하기 때문에 위 내용이 반드시 정답이라고 할 수는 없네요.

끝.
==============================================================================

시간이 나는대로 검색기, 색인기, 로봇, 요약서버 등등의 각 구조를 올려보겠습니다.
제가 글재주와 말주변이 없어서 설명에 자신은 없군요.

질문은 되도록 쉬운걸로... 오류는 반드시 지적을...

그럼 오늘도 한단계 앞으로 나아가시길..

댓글 없음: