今天在寫公司的code 時. 突然發現!! 原來我沒有把 Sphinx 的相關文件留存下來耶!!
所以就補一下文件
Sphinx: 目前來看 以php 來說. 做全文檢索 效能是不錯的.. 之前有用 lucene 的 solr + 庖丁解牛 (很帥的名字吧)
但一直產生 lock 的情況. 所以就改用了 sphinx
安裝元件版本
sphinx-0.9.8-rc2.tar.gz
mmseg-0.7.3.tar.tar
fix-crash-in-excerpts.patch
sphinx-0.98rc2.zhcn-support.patch
*.patch 則是修正原本的 Sphinx 可使用 charset_dictpath 指定詞庫
1. 安裝 Mmsge
版本: mmseg-0.7.3.tar
./configure --prefix=/usr/local/mmseg;
make;
make install;
// 建立詞庫
./mmseg -u (檔案名稱)
(可以拿 注音的詞庫來修正. )
// 建立自己的詞庫
注意: 詞庫的部分..只支援全型字.
// 詞庫格式
{中文字}chr(9){1}
{x:1}
// 將自己所建的詞庫, 產生成 sphinx 可讀的 uni 格式
// 檔名為 {uni.lib}
// 會產生 {檔案}.uni
// 再將它命名為 uni.lib
2. 安裝 Sphinx
版本: sphinx-0.9.8-rc2 + 分詞補丁
解壓了 sphinx 0.9.8 後.
patch -p1 < ../sphinx-patch/sphinx-0.98rc2.zhcn-support.patch
patch -p1 < ../sphinx-patch/fix-crash-in-excerpts.patch
// 需先行確認各路徑是否正確
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib --with-mmseg-includes=/usr/local/mmseg/include/mmseg --with-mmseg-libs=/usr/local/mmseg/lib;
make;
make install;
( 由於要用 mmseg 做分詞. 所以 藍色 部分務必加上嘍. Mysql 的部分.. 主要也是要讓 mysql 有 sphinx 的引擎嘍. 可加也可不加 )
# Sphinx 的額外修正. 若是要拆詞的話. 拆詞數太少. 可以修正 sphinx.h 檔
src/sphinx.h
#define SPH_MAX_QUERY_WORDS 10 默認為 10
影響 buildkeywords 對索引無影響
安裝時 Sphinx 的 error Q & A
Q: indexer: error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory
A: Adding /usr/lib/mysql to /etc/ld.so.conf fixed it
Q: undefined reference to `libiconv`
A:
編輯:
./src/MakeFile 文件
將
LIBS = -lm -lexpat -L/usr/local/lib
改成
LIBS = -lm -lexpat -liconv -L/usr/local/lib
Q: libsphinx.a CSphTokenizer_zh_CN_UTF8::CSphTokenizer_zh_CN_UTF8()
A:
先行 ./configure 後
./src/MakeFile文件
將
LIBS = -lm -lexpat -L/usr/local/lib
改成
LIBS = -lm -lexpat -liconv -L/usr/local/lib
再 make