<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://workspace.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Service_sphinx_lnw</id>
	<title>Service sphinx lnw - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://workspace.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Service_sphinx_lnw"/>
	<link rel="alternate" type="text/html" href="https://workspace.onionmixer.net/wiki/index.php?title=Service_sphinx_lnw&amp;action=history"/>
	<updated>2026-04-21T12:15:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://workspace.onionmixer.net/wiki/index.php?title=Service_sphinx_lnw&amp;diff=1265&amp;oldid=prev</id>
		<title>Onionmixer: gentoo 에서 sphinx 를 local pockage 로 세팅하기 페이지 내용 추가</title>
		<link rel="alternate" type="text/html" href="https://workspace.onionmixer.net/wiki/index.php?title=Service_sphinx_lnw&amp;diff=1265&amp;oldid=prev"/>
		<updated>2016-02-19T09:55:29Z</updated>

		<summary type="html">&lt;p&gt;gentoo 에서 sphinx 를 local pockage 로 세팅하기 페이지 내용 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;gentoo 에서 sphinx 를 local pockage 로 세팅하기&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==사전준비==&lt;br /&gt;
&lt;br /&gt;
이 내용은 [http://workspace.onionmixer.net/mediawiki/index.php?title=Service_sphinx 요기] 를 기반으로 전개한다. 기본적인 사용법은 [http://workspace.onionmixer.net/mediawiki/index.php?title=Service_sphinx 요기] 문서를 통해 미리 익혔을것이라 가정하고 진행한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
기존의 문서내용은 gentoo 에 있는 패키지를 사용하는것이 주 내용이 아니다. 따라서 이 문서는 gentoo 에 있는 패키지를 주로 사용하는 전제 조건을 가진다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
미리 검색엔진에 사용할 dictionary 파일은 text 파일의 형태로 준비해놓기를 권장한다. 물론 UTF-8 NFC 여야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 내용은 다음과같은 디렉토리 구조를 가진다는 것을 참고해야 한다.&lt;br /&gt;
&lt;br /&gt;
* /usr/local/search&lt;br /&gt;
** 본 내용의 주 설치 패키지들이 이 디렉토리 아래쪽에 위치하게 된다.&lt;br /&gt;
* /var/log/sphinx&lt;br /&gt;
** sphinx 검색엔진의 log 가 들어간다&lt;br /&gt;
* /var/lib/sphinx/data&lt;br /&gt;
** sphinx 관련된 데이터들이 들어간다&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 문서에서 필요한 패키지가 있다. 사전에 미리 설치하면 좀더 편하다. 버전은 크게 상관이 없다.&lt;br /&gt;
&lt;br /&gt;
* boost-build&lt;br /&gt;
* boost&lt;br /&gt;
* postgresql&lt;br /&gt;
** USE FLAG 에서 &amp;quot;server&amp;quot;는 제거하는것이 좋다&lt;br /&gt;
* mms-agent&lt;br /&gt;
* mongo-tools&lt;br /&gt;
* mongodb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==사전에 필요한 패키지의 설치==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
emerge /usr/portage/dev-util/boost-build/boost-build-1.57.0.ebuild&lt;br /&gt;
emerge /usr/portage/dev-libs/boost/boost-1.57.0.ebuild&lt;br /&gt;
USE=&amp;quot;-server&amp;quot; emerge -pv postgresql&lt;br /&gt;
emerge /usr/portage/app-admin/mms-agent/mms-agent-3.6.0.201_p1.ebuild&lt;br /&gt;
emerge /usr/portage/app-admin/mongo-tools/mongo-tools-3.0.5.ebuild&lt;br /&gt;
emerge scons&lt;br /&gt;
USE=&amp;quot;mms-agent&amp;quot; emerge -pv mongodb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
어렵지 않다.. gentoo 의 사용법대로 간단하게 설치를 진행하면 된다.&lt;br /&gt;
&lt;br /&gt;
ebuild 파일이 버전업되어 존재하지 않는 경우라면 gentoo 에서 권장하는 버전을 설치하면 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==필요한 디렉토리의 준비==&lt;br /&gt;
&lt;br /&gt;
다음의 명령어를 통해 필요한 디렉토리들을 미리 준비한다&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /var/log/sphinx&lt;br /&gt;
mkdir /var/lib/sphinx&lt;br /&gt;
mkdir /var/lib/sphinx/data&lt;br /&gt;
mkdir /usr/local/search&lt;br /&gt;
mkdir /usr/local/search/bin&lt;br /&gt;
mkdir /usr/local/search/lib&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==sphinx 패키지 및 mongo driver 의 설치==&lt;br /&gt;
&lt;br /&gt;
패키지를 빌드하는 디렉토리는 &amp;quot;/usr/src/&amp;quot; 로 정한다. 패키지 파일을 미리 준비해놓는것이 좋다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/src/&lt;br /&gt;
tar xvf sphinx_build.tar&lt;br /&gt;
cd ./sphinx_build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===mongodb c driver 의 설치===&lt;br /&gt;
&lt;br /&gt;
다음과 같은 방법으로 mongodb c driver 를 설치한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cd sphinx_onion_branch/mongo-c-driver&lt;br /&gt;
&lt;br /&gt;
./configure --prefix=/usr/local/search/mongo_driver/&lt;br /&gt;
&lt;br /&gt;
make ; make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
설치는 간단하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===mongodb cxx driver 의 설치===&lt;br /&gt;
&lt;br /&gt;
다음과 같은 방법으로 mongodb cxx driver 를 설치한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cd sphinx_onion_branch/mongo-cxx-driver&lt;br /&gt;
&lt;br /&gt;
scons --prefix=/usr/local/search/mongo_driver/ install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===sphinx 의 설치===&lt;br /&gt;
&lt;br /&gt;
다음과 같은 방법으로 sphinx 검색엔진을 설치한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/src/sphinx_build/sphinx_onion_branch/sphinx&lt;br /&gt;
&lt;br /&gt;
./configure --prefix=/usr/local/search/sphinx --without-odbc --without-mysql --with-pgsql --with-pgsql-includes=/usr/include/postgresql-9.5/ --with-pgsql-libs=/usr/lib64/postgresql-9.4/lib64/ --with-mongoc --with-mongoc-includes=/usr/local/search/mongo_driver/include --with-mongoc-libs=/usr/local/search/mongo_driver/lib&lt;br /&gt;
&lt;br /&gt;
make clean ; make ; make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
검색엔진의 설치는 이와 같이 간단하다. 검색엔진의 설치가 종료되면 사전파일과 데이터가 들어갈 디렉토리를 생성한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/search/sphinx/dict&lt;br /&gt;
mkdir /usr/local/search/sphinx/data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===검색엔진 설치후 후처리작업===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/search/lib&lt;br /&gt;
ln -s /usr/local/search/mongo_driver/lib/libbson-1.0.so ./&lt;br /&gt;
ln -s /usr/local/search/mongo_driver/lib/libmongoc-1.0.so ./&lt;br /&gt;
ln -s /usr/local/search/mongo_driver/lib/libmongoc-priv.so ./&lt;br /&gt;
ln -s libbson-1.0.so libbson-1.0.so.0&lt;br /&gt;
ln -s libmongoc-1.0.so libmongoc-1.0.so.0&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/search/bin&lt;br /&gt;
ln -s /usr/local/search/sphinx/bin/indexer ./&lt;br /&gt;
ln -s /usr/local/search/sphinx/bin/indextool ./&lt;br /&gt;
ln -s /usr/local/search/sphinx/bin/mkdict ./&lt;br /&gt;
ln -s /usr/local/search/sphinx/bin/search ./&lt;br /&gt;
ln -s /usr/local/search/sphinx/bin/searchd ./&lt;br /&gt;
ln -s /usr/local/search/sphinx/bin/spelldump ./&lt;br /&gt;
ln -s /usr/local/search/sphinx/bin/wordbreaker ./&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이처럼 설치된 패키지의 디렉토리에 필요한 파일들을 link 하게 되면, 이후 library 의 path 를 잡아주어야 한다.&lt;br /&gt;
&lt;br /&gt;
/etc/env.d/ 안쪽에 파일을 하나 만들고 다음의 내용을 넣어준다&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
LD_LIBRARY_PATH=&amp;quot;/usr/local/search/lib&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음의 명령어를 통해 추가한 Library path 를 시스템에 적용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
env-update ; source /etc/profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==후반작업==&lt;br /&gt;
&lt;br /&gt;
===mongodb 의 시작===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/mongodb start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
아무것도 할건 없다. 그냥 시작만 해주면 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===dictionary 작업===&lt;br /&gt;
&lt;br /&gt;
다음과같은 작업을 통해 이미 준비된 txt 파일을 sphinx 에 dictionary 로 추가한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
./mkdict words.txt /usr/local/search/sphinx/dict/system.dict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===검색엔진의 시작===&lt;br /&gt;
&lt;br /&gt;
sphinx 의 작동을 위해 sphinx 의 검색엔진 daemon 을 실행시켜야 한다. log 파일을 보며 디버깅을 하기위해 다음과 같은 명령어로 searchd 를 작동시킨다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/search/bin&lt;br /&gt;
/usr/local/search/bin/searchd --logdebugvv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===index 관리용 스크립트 파일의 세팅===&lt;br /&gt;
&lt;br /&gt;
mk_index.sh 라는 이름의 스크립트를 /usr/local/search/bin/ 안쪽에 아래와 같은 내용으로 넣어준다&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
MONGO_ROOT=&amp;quot;/usr&amp;quot;&lt;br /&gt;
SPHINX_ROOT=&amp;quot;/usr/local/search/sphinx&amp;quot;&lt;br /&gt;
TIME_STR=`date +&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;`&lt;br /&gt;
TIME_PATH=&amp;quot;$SPHINX_ROOT/etc/last_index&amp;quot;&lt;br /&gt;
LAST_TIME_STR=`cat $TIME_PATH` 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
if [[ $LAST_TIME_STR = &amp;#039;&amp;#039; ]]; then&lt;br /&gt;
    LAST_TIME_STR=&amp;quot;0000-00-00 00:00:00&amp;quot;;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [[ $1 = &amp;#039;-f&amp;#039; ]]; then&lt;br /&gt;
    LAST_TIME_STR=&amp;quot;0000-00-00 00:00:00&amp;quot;;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo $LAST_TIME_STR&lt;br /&gt;
&lt;br /&gt;
echo $TIME_STR &amp;gt; $TIME_PATH&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;LAST TIME : $LAST_TIME_STR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TEMPLATE=$SPHINX_ROOT/etc/sphinx.conf.template&lt;br /&gt;
COMMONS=$SPHINX_ROOT/etc/sphinx.conf.commons&lt;br /&gt;
CONF1=$SPHINX_ROOT/etc/sphinx1.conf&lt;br /&gt;
CONF2=$SPHINX_ROOT/etc/sphinx2.conf&lt;br /&gt;
CONF=$SPHINX_ROOT/etc/sphinx.conf&lt;br /&gt;
&lt;br /&gt;
cp $TEMPLATE $CONF1&lt;br /&gt;
perl -p -i -e &amp;quot;s/\{\{LAST_TIME\}\}/0000-00-00 00:00:00/g&amp;quot; $CONF1&lt;br /&gt;
perl -p -i -e &amp;quot;s/\{\{SUFFIX\}\}//g&amp;quot; $CONF1&lt;br /&gt;
&lt;br /&gt;
cp $TEMPLATE $CONF2&lt;br /&gt;
perl -p -i -e &amp;quot;s/\{\{LAST_TIME\}\}/$LAST_TIME_STR/g&amp;quot; $CONF2&lt;br /&gt;
perl -p -i -e &amp;quot;s/\{\{SUFFIX\}\}/_inc/g&amp;quot; $CONF2&lt;br /&gt;
&lt;br /&gt;
cat $CONF1 &amp;gt; $CONF&lt;br /&gt;
cat $CONF2 &amp;gt;&amp;gt; $CONF&lt;br /&gt;
cat $COMMONS &amp;gt;&amp;gt; $CONF&lt;br /&gt;
&lt;br /&gt;
rm -f $CONF1 $CONF2&lt;br /&gt;
&lt;br /&gt;
RUNNING=`ps -ef | grep &amp;#039;indexer module_search_total&amp;#039; | grep -v grep`&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$RUNNING&amp;quot; = &amp;#039;&amp;#039; ]]; then&lt;br /&gt;
    if [[ $1 = &amp;#039;-f&amp;#039; ]]; then&lt;br /&gt;
        $SPHINX_ROOT/bin/indexer module_search_total --rotate&lt;br /&gt;
    else &lt;br /&gt;
        $SPHINX_ROOT/bin/indexer module_search_total_inc --rotate&lt;br /&gt;
    $MONGO_ROOT/bin/mongo --eval &amp;quot;\ &lt;br /&gt;
        var con=new Mongo(); \&lt;br /&gt;
        var db=con.getDB(&amp;#039;sphinx&amp;#039;); \&lt;br /&gt;
        var cursor=db.module_search_total_inc.find({}); \&lt;br /&gt;
        while(cursor.hasNext()) { \&lt;br /&gt;
            var row = cursor.next(); \&lt;br /&gt;
            db.module_search_total.update({_id:row._id},row,{upsert:true}); \&lt;br /&gt;
        }\&lt;br /&gt;
        db.module_search_total_inc.remove({});&amp;quot;&lt;br /&gt;
        $SPHINX_ROOT/bin/indexer --merge  module_search_total module_search_total_inc --rotate&lt;br /&gt;
    fi &lt;br /&gt;
    rm -f $SPHINX_ROOT/data/module_search_total_inc.*&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Found Another Indexing Process&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 스크립트 파일의 사용법은 간단하다. &lt;br /&gt;
&lt;br /&gt;
* 그냥 실행하게 되면 index 를 갱신만 한다.&lt;br /&gt;
* -f 옵션을 주고 실행하면 index 를 지우고 바닥부터 갱신한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
처음 사용해본다면 -f 를 통해 index 를 처음부터 생성해주기 바란다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
외부에서 검색엔진에 정상적으로 접근이 된다면 성공이다.&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>