Sphinx+PHP搜索服務
來自: http://my.oschina.net/xtfjt1988/blog/610864
隨著自己電影網站資源逐漸增多,增加電影資源搜索服務成為必然。直接操作數據庫的搜索,IO口請求增多減低了搜索性能。之前項目中有sphinx的使用基礎,加之支持中文檢索服務,最后決定采用基于sphinx的Coreseek搜索服務。
下載安裝步驟【本人采用 linux環境下 4.1版本,系統支持mysql和xml數據源】:
- </li>
-
解壓gz包,tar zxvf coreseek-4.1-beta.tar.gz
</li> -
編譯安裝 mmseg【中文分詞包】
</li>-
./bootstrap
</li> -
./configure --prefix=/usr/local/mmseg3
</li> -
make && make install
</li> </ol> -
編譯安裝 coreseek
</li>-
sh buildconf.sh #輸出的warning信息可以忽略,如果出現error則需要解決
</li> -
./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql #with-mmseg-libs就是mmseg中文分詞路徑
</li> -
make && make install
</li> </ol> </ol>電影網站更新周期比較長,sphinx采用主索引+增量索引方式進行索引,最后合并兩個索引文件。下面開始部署自己的搜索配置文件:
-
進入coreseek安裝目錄下的etc文件,新建或修改 .conf配置文件
</li> -
配置source源
</li>-
source movie
{
type = mysql
sql_host = localhost #mysql數據庫host
sql_user = root #mysql用戶
sql_pass = #mysql用戶密碼
sql_db = movie #movie
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET NAMES utf8
#建立增量索引
sql_query_pre = REPLACE INTO movie_sph_counter SELECT 1, MAX(id) FROM movie
sql_query = SELECT id, UNIX_TIMESTAMP(cdate) AS date ,id AS movie_id ,name, year, type,status,sync_status FROM movie WHERE id<=( SELECT max_movie_id FROM movie_sph_counter WHERE counter_id=1 )
#搜索返回字段
sql_attr_uint = movie_id
sql_attr_uint = year
sql_attr_uint = type
sql_attr_uint = date
sql_attr_uint = status
sql_attr_uint = sync_status
sql_field_string = name
sql_query_info_pre = SET NAMES utf8 #命令行查詢時,設置正確的字符集
sql_query_info = SELECT * FROM movie WHERE id=$id #命令行查詢時,從數據庫讀取原始數據信息
}
#增量索引源
</li> </ol>
source delta : movie
{
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, UNIX_TIMESTAMP(cdate) AS date ,id AS movie_id ,name , year, type ,status,sync_status FROM movie WHERE id>( SELECT max_movie_id FROM movie_sph_counter WHERE counter_id=1 )
sql_query_post_index = REPLACE INTO movie_sph_counter SELECT 1, MAX(id) FROM movie
} -
配置索引
</li>-
#index定義
</li> </ol>
index movie
{
source = movie #對應的source名稱
path = /usr/local/coreseek/var/data/movie #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#中文分詞配置,詳情請查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
charset_dictpath = /usr/local/mmseg/etc/ #BSD、Linux環境下設置,/符號結尾 mmseg路徑
charset_type = zh_cn.utf-8 #中文編碼
}
index delta : movie
{
source = delta
path = /usr/local/coreseek/var/data/movie_delta #注意!!不要和主索引路徑名稱一樣
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath = /usr/local/mmseg/etc/
charset_type = zh_cn.utf-8
} -
配置搜索服務
</li>-
#searchd服務定義
</li> </ol>
searchd
{
listen = 9312 #端口號,可以自己定義
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
compat_sphinxql_magics=0
pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
log = /usr/local/coreseek/var/log/searchd_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
query_log = /usr/local/coreseek/var/log/query_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
binlog_path = #關閉binlog日志
} -
執行命令建立索引: /usr/local/coreseek/bin/indexer -c movie.conf --all
</li> -
后臺開啟搜索服務運行:/usr/local/coreseek/bin/searchd -c movie.conf
</li> -
建立定時任務,執行增量索引:/usr/local/coreseek/bin/indexer -c csft_movie.conf delta --rotate
</li> -
建立定時任務,合并索引:/usr/local/coreseek/bin/indexer -c csft_movie.conf --merge movie delta --merge-dst-range deleted 0 0 --rotate
</li> -
至此基于sphinx+mysql的搜索服務已經搭建完畢,接下來就是根據sphinxapi.php開發搜索接口代碼……
</li> </ol>第一次自己搭建sphinx搜索服務,最后測試網站搜索,速度杠杠的。
特此分享,希望對大家有所幫助
-
-
-
-
-
-