DB/DB 공통 관리

1. Sphinx 이란

서버엔지니어 2023. 3. 26.
728x90

mysql 사용중인 사이트에 통합검색을 하나 달아야 합니다. 
5백만 건 정도이며 text자료형의 필드가 다소 있는 상태입니다. 
'like'는 'index'를 사용할 수 없기 때문에 논의 대상 자체가 아닙니다.
myisam 구조라서 full-text 방식을 사용하고 있지만 varchar 도 검색엔진에 태워야 하는데 결국 부분적으로 'like'를 사용해야 하기때문에 대안이 아닙니다. 

결국 엘라스틱서치(Elasticsearch)와 스핑크스(sphinx) 두개로 압축이 되었고, 당분간 스핑크스를 사용하기로 결정했습니다.

검색엔진은 크게 3가지의 기능을 가지고 있어야 합니다. 
형태소 분석기, 색인(index)하는 기능, 마지막으로 검색하는 기능입니다. 
검색엔진은 위의 3가지의 기능을 필수로 가지고 있어야 하는데, 그중 가장 어려운것이 형태소 분석기라고 볼 수 있습니다. 

요즘 검색엔진은 오픈소스도 아주 훌륭한 듯합니다. 
가장 유명한 오픈소스 검색엔진은 루씬(Lucene), 솔라(Solar), 엘라스틱서치(Elasticsearch) 이라고 봅니다. 
사실 루씬이라는 부모에게서 솔라 엘라스틱서치가 나온 것이라서 기본 개념은 거의 같다고 보면 됩니다. 

여러자료를 살펴본 결과 엘라스틱서치 + 은전한닢(형태소분석기) 조합이였지만,
간단한 키워드 검색이 대부분일 사이트에는 다소 과분한 듯하여 라이트한 스핑크스를 사용하기로 했습니다. 

스핑크스를 사용하면 SQL 데이터베이스, NoSQL 스토리지 또는 파일에 저장된 데이터를 일괄적으로 색인 및 검색 할 수 있습니다. 
형태소분석기가 다소 약하다(?) 생각하시면 되고 색인과 검색용이다 라고 보시면 됩니다. 

MySQL(MariaDB) + sphinx 구성을 한다면
MySQL에 데이터가 있고 sphinx에는 인덱스를 구성하여 검색을 SQL질의와 유사하게 결과를 신청하는 구조입니다. 

sphinx를 설치 후 색인까지 완료했다고 하면 응용프로그램에서 사용할때는 3가지의 방법이 있습니다. 
SphinxAPI는 java, php 및 기타 언어에서 사용할 수 있는 기본 라이브러리입니다. 
SphinxQL은 표준 MySQL 클라이언트 라이브러리 및 쿼리 구문을 사용하여 Sphinx 쿼리를 사용할 수 있게 해줍니다. 
SphinxSE는 MySQL과 연결하여 mysql안에서 직접 스핑크스의 색인을 호출 할 수 있으면 join등을 사용할 수도 있게 해줍니다. 
mariadb 기술문서를 살펴보니 SphinxSE engine을 플러그인으로 사용할 수 있는 방법이 기술되어 있습니다. 

앞으로의 포스트에서는 다음과 같은 것을 살펴볼 예정입니다.

1. Sphinx 설치 방법
2. Sphinx 설정 방법
3. SphinxQL 사용법 및 쿼리 테스트
4. SphinxQL을 php에서 연동하는 방법
5. MariadDB에서 SphinxSE 엔진 연동 및 사용법

말씀드리고 싶은 부분은 5번인데 이를 하려면 1~3을 알아야 합니다. 
현재 구글 애드센스를 블로그에 신청 중인데 코드를 다수 사용하면 안되고 문장이 있는 글들을 작성해야 한다고 합니다. 
그래서 지금까지의 글들은 그림도 없습니다. 

빨리 구글고시 패스하여 쓰고 싶은 형태의 글 작성하기를 소망합니다. 

댓글