소개
1부에서 설치에 이어 2부에서는 Sphinx와 MySQL을 연동해보고 MySQL처럼 쿼리문을 통해 간단한 검색을 해보도록 하자.
참고로 내용이 많아 보이나 복잡하진 않다.
1. SQL 데이터 삽입
우선 간단한 테스트를 위해 아래의 파일을 받아 MySQL에 넣도록 한다.
(Sphinx에서 제공하는 example.sql은 데이터가 영어로만 되어 있으므로 한글 테스트가 안된다. 각자 알아서 참고 자료로 활용하도록 한다.)
아래의 명령어를 통해 test DB에 데이터를 넣도록 한다.
만약 test DB가 없다면, 수동으로 만들어줘야 한다. 만약 다른 DB에 넣고 싶다면 test명을 바꾸면 된다.
좀더 자세한건 2013/06/21 - [Database/MySQL] - [MySQL] MySQL DB와 Table 백업 및 복원 관리 글을 읽도록 하자.
mysql -u아이디 -p test < test.sql
참고로 SQL 예제 데이터는 아래와 같은 내용이며, 데이터는 인터넷에 떠도는 SQL 파일을 예제에 맞게 수정하였다.
2. Sphinx 설정
sphinx.conf 파일을 설정하는데 조금 많은 내용이 있다.
이제 설정파일을 어떻게 설정할지 최대한 간단하게 설명하겠다.
아래 내용중 다루지 않은 설정이 있으니 첨부된 파일이나, 더보기를 통해 확인하여 예제를 진행하도록 한다.
1. 설정파일 열기
설정 파일을 연다.
vi /usr/local/sphinx/etc/sphinx.conf
2. source 설정
sphinx.conf 내용중 source 부분이다.
source zipcode { type = mysql sql_host = localhost sql_user = DB아이디 sql_pass = DB패스워드 sql_db = DB명 sql_port = 3306 # optional, default is 3306 sql_sock = /tmp/mysql.sock sql_query_pre = SET NAMES utf8 sql_query = SELECT sn, zipcode, state, city, suburb, address FROM zipcode sql_field_string = zipcode sql_field_string = state sql_field_string = city sql_field_string = suburb sql_field_string = address } |
source 부분에서는 인덱스명을 지정하고, 어떤 데이터를 인덱싱 할 것이지 등등 설정하는 부분이다.
source명 : zipcode (테이블명으로 하는 것이 편하다.)
sql_query_pre : 한글 데이터를 위해 utf8로 설정한다.
sql_query : 어떤 데이터를 인덱싱 하기 위해서는 MySQL로부터 데이터를 가져와야 한다. 자신이 Sphinx를 통해 검색 할 데이터 내용, 검색 결과에 표시할 내용을 포함하도록 MySQL 쿼리문을 작성하면 된다. 단, 첫번째 필드는 절대로 중복되지 않는 Primary Key 또는 Unique Key 값을 줘야 한다. 따라서 이런 필드가 없다면 DB에 만들어야 한다.
sql_field_string : Sphnx가 데이터를 다루기 위해 필요한 선언이라고 생각하면 된다. 즉, 데이터 타입을 지정해주는 것으로 int, string, float 등 이라고 생각하면 된다.
sql_field_string 외에 아래와 같은 데이터 타입이 있다.
sql_attr_uint
sql_attr_bigint
sql_attr_timestamp
...
...
일단은 정상적인 실행이 되는지 확인하기 위한 차원이므로 데이터 형태에 따른 차이와 그에대한 자세한 내용은 다음 3부에서 다루도록 하겠다. (중요하기 때문에 필수적으로 봐야 할 것이다.)
2. index 설정
index 설정에는 한글 설정, 검색 방법 등등의 설정을 다루게 된다.
sphinx.conf 내용중 index 부분이다.
index zipcode { source = zipcode path = /usr/local/sphinx/var/data/zipcode docinfo = extern charset_type = utf-8 charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F ngram_len = 1 ngram_chars = U+4E00..U+9FBB, U+3400..U+4DB5, U+20000..U+2A6D6, U+FA0E, U+FA0F, U+FA11, U+FA13, U+FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27, U+FA28, U+FA29, U+3105..U+312C, U+31A0..U+31B7, U+3041, U+3043, U+3045, U+3047, U+3049, U+304B, U+304D, U+304F, U+3051, U+3053, U+3055, U+3057, U+3059, U+305B, U+305D, U+305F, U+3061, U+3063, U+3066, U+3068, U+306A..U+306F, U+3072, U+3075, U+3078, U+307B, U+307E..U+3083, U+3085, U+3087, U+3089..U+308E, U+3090..U+3093, U+30A1, U+30A3, U+30A5, U+30A7, U+30A9, U+30AD, U+30AF, U+30B3, U+30B5, U+30BB, U+30BD, U+30BF, U+30C1, U+30C3, U+30C4, U+30C6, U+30CA, U+30CB, U+30CD, U+30CE, U+30DE, U+30DF, U+30E1, U+30E2, U+30E3, U+30E5, U+30E7, U+30EE, U+30F0..U+30F3, U+30F5, U+30F6, U+31F0, U+31F1, U+31F2, U+31F3, U+31F4, U+31F5, U+31F6, U+31F7, U+31F8, U+31F9, U+31FA, U+31FB, U+31FC, U+31FD, U+31FE, U+31FF, U+AC00..U+D7A3, U+1100..U+1159, U+1161..U+11A2, U+11A8..U+11F9, U+A000..U+A48C, U+A492..U+A4C6 } |
index명 : source명과 동일하게 해준다.
path : 인덱스한 파일이 저장되는 장소다. 위치는 상관없지만 데이터명은 쉽게 알아보기 위해 source명과 동일하게 처리해 주도록 한다.
charset_type : 한글 설정을 위해 utf-8로 해준다.
charset_table : sphinx.conf.dist 파일을 열어보면 utf-8 기본값으로 이미 위처럼 설정되어 있다. 그대로 복사해 사용한다.
ngram_len : 한글 검색을 위해 ngram을 설정해야 한다. 1값으로 설정한다.
ngram_chars : ngram을 검색하기 위해 나눌 단위를 설정한다. 한국어, 중국어, 일본어 모두 검색이 가능하도록 CJK를 사용하며 된다.
(CJK http://sphinxsearch.com/wiki/doku.php?id=charset_tables#cjk_ngram_characters)
sphinx.conf 내용중 type이 rt인 index 부분이다.
index zipcodert { type = rt rt_mem_limit = 32M path = /usr/local/sphinx/var/data/zipcodert charset_type = utf-8 rt_field = state } |
2013/06/22 - [Linux Debian 7] - [Debain] PATH 설정
cd /usr/local/sphinx/bin
./indexer --all
아래와 같은 인덱싱 결과가 나타난다.
그외 아래와 같은 옵션이 있다.
--all : 설정된 모든 리스트를 인덱싱 한다.
cd /usr/local/sphinx/bin
./searchd
접속하도록 한다.
mysql -h0 -P9306
SphinxQL은 MySQL의 쿼리문과는 조금 다르나 아주 기본적인 SELECT 문은 같으므로 일단 아래처럼 한다.
참고할 점은 FROM 뒤에 오는 Table명은 아까 sphinx.conf 설정에 사용했던 index명을 사용하면 된다는 점이다.
SELECT * FROM zipcode; |
이제 아래처럼 검색 결과가 나오면 Sphinx가 정상적으로 실행된 것이다.
Sphinx 3부에서는 SphixQL과 설정파일의 상세한 설정에 대해 설명하겠다.
2015.02.07 - Sphinx-2.2.7 버전 안내
2.2.7 버전에서 더 이상 charset_type 변수 설정 값이 사라졌습니다. 이제, Sphinx에서는 UTF-8 기준으로 지원한다고 하니, 더 이상 따로 UTF-8 설정을 하실 필요는 없고, 대신 DB 데이터 및 MySQL 설정이 UTF-8로 설정되었는지 확인해야 할 듯 합니다.
2013/05/20 - [Database/Sphinx 검색엔진] - [Sphinx] 검색 엔진 Sphinx 1부 - Sphinx 설치
2013/06/21 - [Database/Sphinx 검색엔진] - [Sphinx] 검색 엔진 Sphinx 3부 - SphinxQL 사용과 설정
2013/06/23 - [Database/Sphinx 검색엔진] - [Sphinx] 검색 엔진 Sphinx 4부 - 인덱싱 설정과 데몬 설정
2013/07/01 - [Linux Debian 7/Sphinx 검색 엔진] - [Debian] 검색 엔진 Sphinx 5부 - PHP와의 연결
'데비안 리눅스 설치 가이드 > Sphinx 검색 엔진' 카테고리의 다른 글
[Sphinx] 검색 엔진 Sphinx 5부 - PHP와의 연결 (3) | 2013.07.01 |
---|---|
[Sphinx] 검색 엔진 Sphinx 4부 - 인덱싱 설정과 데몬 설정 (3) | 2013.06.23 |
[Sphinx] 검색 엔진 Sphinx 3부 - SphinxQL 사용과 설정 (25) | 2013.06.21 |
[Sphinx] 검색 엔진 Sphinx 1부 - Sphinx 설치 (2) | 2013.05.20 |