CoreSeek 官網安裝教程:http://www.coreseek.cn/products-install/install_on_bsd_linux/
視頻教程:http://video.sina.com.cn/v/b/82014487-1501404804.html【PHP特級部分視頻_第二十七集 Coreseek安裝與測試_php(LAMP兄弟連)】 裏面包括有 sphinx 模塊加載安裝的內容
檢索結構 php -> sphinx -> mysql 非結構化數據又叫全文數據,非固定長度字段例如文章標題搜索這類適用sphinx 全文數據搜索: 1 順序掃描 : 如like查找 2 索引掃描 : 把非結構化數據中的內容提取出來一部分從新組織,這部分數據就叫作索引 全文檢索分爲兩個過程 1.建立索引 2.搜索索引 建立索引: sphinx經過語言處理組件會把搜索語句中的標點符號,語氣助詞給過濾掉,而後處理完畢後會 分析出一些詞語,傳給索引組件,而後排序去除重複詞語. 搜索索引: 搜索關鍵字 提交 -> sphinx 分析出文檔ID -> mysql經過ID查詢數據並返回 中文分詞須要coreseek coreseek 支持中文的全文檢索引擎 sphinx的安裝 下載源碼包 進行源碼安裝 ./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql make && make install sphinx 中重要的三個命令(bin目錄下) Indexer 建立索引命令 Searchd 啓動進程命令 Search 命令行搜索命令 配置sphinx cd /usr/local/sphinx/etc cp sphinx.conf.dist sphinx.conf vi sphinx.conf 配置文件 名爲main的主數據源:source main{} 繼承名爲main的增量數據源:source delta:main{} 名爲main的主索引:index main{} 繼承名爲main的增量索引:index delta:main{} 分佈式索引:index dist1{} 索引器:indexer{} 服務進程:searchd{} 修改配置文件中主數據源的mysql配置,測試環境的數據源名爲main,假設mysql中test有張表叫post source main { # data source type. mandatory, no default value # known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc type = mysql ##################################################################### ## SQL settings (for 'mysql' and 'pgsql' types) ##################################################################### # some straightforward parameters for SQL source types sql_host = localhost sql_user = root sql_pass = admin sql_db = test sql_port = 3306 # optional, default is 3306 sql_sock = /tmp/mysqld.sock #若是是linux下須要開啓,指定sock文件 sql_query_pre = SET NAMES utf8 sql_query_pre = SET SESSION query_cache_type=OFF #關閉緩存 # main document fetch query # mandatory, integer document ID field MUST be the first selected column sql_query = \ #獲取數據的sql語句 SELECT id,title,content FROM post #sql_attr_uint = group_id #對排序字段進行註釋 #sql_attr_timestamp = date_added #對排序字段進行註釋 sql_query_info = SELECT * FROM post WHERE id=$id } 註釋掉全部增量數據源,修改主索引 index main { source = main # index files path and file name, without extension # mandatory, path must be writable, extensions will be auto-appended path = /usr/local/sphinx/var/data/main docinfo = extern mlock = 0 morphology = none # default is 1 (index everything) min_word_len = 1 # charset encoding type # optional, default is 'sbcs' # known types are 'sbcs' (Single Byte CharSet) and 'utf-8' charset_type = utf-8 # 'utf-8' default value is # charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F } 註釋掉全部的增量索引和分佈式索引 配置完成後,建立索引 命令 indexer -c 指定配置文件 --all 對全部索引從新編制索引 --rotate 用於輪換索引,主要是在不中止服務的時候,增長索引 --merge 合併索引 /usr/local/sphinx/sbin/indexer -c /usr/local/sphinx/etc/sphinx --all 若是報錯./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory 解決方式:cp /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18 測試 創建索引 [root@localhost bin]# ./indexer --all Sphinx 0.9.9-release (r2117) Copyright (c) 2001-2009, Andrew Aksyonoff using config file '/usr/local/sphinx/etc/sphinx.conf'... indexing index 'main'... collected 2 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 2 docs, 47 bytes total 0.033 sec, 1414 bytes/sec, 60.21 docs/sec total 1 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg total 5 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg 搜索 [root@localhost bin]# ./search linux1 Sphinx 0.9.9-release (r2117) Copyright (c) 2001-2009, Andrew Aksyonoff using config file '/usr/local/sphinx/etc/sphinx.conf'... index 'main': query 'linux1 ': returned 1 matches of 1 total in 0.000 sec displaying matches: 1. document=1, weight=1 id=1 title=linux1 content=salflsdkjsdglds words: 1. 'linux1': 1 documents, 1 hits sphinx至關於把數據庫數據索引靜態化到本地 來加快查詢速度 避免消耗數據庫,給數據庫給降壓,當數據更新的時候,須要從新indexer --all 或者用 indexer main重建全部索引 纔會搜出新的數據 安裝CORESEEK coreseek裏有2個文件夾 一個是mmseg中文分詞包 還有一個是csft(其實就是sphinx)包 都要安裝 首先安裝mmseg中文分詞 ./configure --prefix=/usr/local/mmseg 編譯時可能會報錯config.status: error: cannot find input file: src/Makefile.in 經過automake來解決 首先檢查是否安裝了libtool若是沒有 yum -y install libtool automake 若是automake報錯 緣由多是下列 Libtool library used but `LIBTOOL' is undefined The usual way to define `LIBTOOL' is to add `AC_PROG_LIBTOOL' to `configure.ac' and run `aclocal' and `autoconf' again. If `AC_PROG_LIBTOOL' is in `configure.ac', make sure its definition is in aclocal's search path. 緣由分析 aclocal是個掃描程序, 負責掃描configure.ac中全部的宏定義並展開, 上面產生的緣由就是找不到LIBTOOL宏的定義之處形成的.緣由就是aclocal與libtool沒有安裝在一個相同目錄下面aclocal是去默認 安裝目錄 /usr/share/aclocal下面搜索全部的.m4文件找所定義的宏,可是因爲安裝了多個aclocal,可能aclocal目錄不存在,實際目錄爲/usr/share/aclocal1.10等, 這就形成了aclocal找不到m4文件的狀況, 解決辦法就是將文件夾aclocal1.10重命名爲aclocal.或者顯示指定路徑 aclocal -I /usr/share/aclocal1.10 -I /usr/share/libtool/m4 --install 或者把/usr/share/libtool/m4下面的文件都copy至/usr/share/aclocal1.10中.
或者:分別執行如下命令
一、aclocal 二、autoconf 三、autoheader 四、automake --add-missing
本人的機器上是/usr/share/下有2個文件夾 一個是aclocal,一個是aclocal-1.11,首先將aclocal的全部文件拷貝到aclocal-1.11下 cp -R /user/share/aclocal/* /usr/share/aclocal-1.11/
而後從新運行aclocal和autoconf aclocal && autoconf 最後再次運行automake automake 而後繼續mmseg的安裝 ./configure --prefix=/usr/local/mmseg make && make install 若是make 報錯 There is an easy fix when you get such messages as "X--tag=CXX: command not found". Just type: export echo=echo And try again. 因此輸入 export echo=echo 而後再次運行安裝 make && make install 安裝csft ./configure --prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ make && make install 安裝完畢後 注意 coreseek 中的配置文件也是csft.conf 而不是 sphinx.conf cd /usr/local/coreseek/etc cp sphinx.conf.dist csft.conf vim csft.conf 有些配置改動以下其餘配置內容如上文的sphinx.conf 在索引源中註釋掉txt index main{ #stopwords = G:\data\stopwords.txt #wordforms =G:\data\wordforms.txt #exceptions =/data/exceptions.txt #charset_type = sbcs #添加下面2行 意思是把中文分詞加入到配置文件中 char_type = zh_cn.utf-8 charset_dictpath =/usr/local/mmseg/etc/ #你安裝mmseg的目錄 } 保存配置 創建索引 cd /usr/local/coreseek/bin ./indexer --all ./search 中文詞綴 如何用php去使用sphinx Sphinx集成到php程序中有兩種方式 1.Sphinx php 模塊(此次咱們選擇使用的方式) 2.Sphinx api 類(位於coreseek源碼包裏的csft裏的api文件夾裏有一個sphinxapi.php,使用的時候包含這個php文件便可) 咱們要使用sphinx須要作如下幾件事: 1.首先要有數據 2.創建sphinx配置文件 3.生成索引 4,啓動searchd 服務進程,並開啓端口9312 5.用php客戶程序去連接sphinx服務 /usr/local/coreseek/bin/searchd 啓動進程命令 searchd -c 指定配置文件 --stop 中止服務 --pidfile 顯示指定pid文件 -p 指定端口(默認9312) 注意:這裏啓動的服務是searchd 使用php sphinx的模塊 下載 sphinx-1.1.0.tgz tar zvxf sphinx-1.1.0.tgz cd sphinx-1.1.0 /usr/local/php/bin/phpize #用於生成一個configure的腳本 進入coreseek源碼包的csft/api/libsphinxclent 目錄下執行configure ./configure make && make install 進入sphinx-1.1.0.gzt的源碼包目錄下 執行configure用於生成so 的shpinx模塊 ./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-sphinx make && make install 安裝成功後會有提示 Build complete. Don't forget to run 'make test'. Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ (這個目錄是sphinx.so所在的目錄) 而後咱們編輯php的ini文件 在extension中加入 extension=sphinx.so 而後重啓nginx和php的服務 最後打印一下phpinfo 查看sphinx是否開啓成功 若是成功開啓 就能夠使用php手冊裏的sphinx的方法和代碼了
編譯出錯解決方案
make all-am make[1]: Entering directory `/down/coreseek-4.1-beta/csft-4.1/api/libsphinxclient' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -g -O2 -c -o sphinxclient.lo sphinxclient.c ./libtool: line 645: X--tag=CC: command not found ./libtool: line 678: libtool: ignoring unknown tag : command not found ./libtool: line 645: X--mode=compile: command not found ./libtool: line 795: *** Warning: inferring the mode of operation is deprecated.: command not found ./libtool: line 796: *** Future versions of Libtool will require -mode=MODE be specified.: command not found ./libtool: line 939: Xgcc: command not found ./libtool: line 939: X-DHAVE_CONFIG_H: command not found ./libtool: line 939: X-I.: command not found ./libtool: line 939: X-g: command not found ./libtool: line 939: X-O2: command not found ./libtool: line 939: X-c: command not found ./libtool: line 987: Xsphinxclient.lo: command not found ./libtool: line 992: libtool: compile: cannot determine name of library object from `': command not found make[1]: *** [sphinxclient.lo] Error 1 make[1]: Leaving directory `/down/coreseek-4.1-beta/csft-4.1/api/libsphinxclient' make: *** [all] Error 2
1. 直接複製系統自帶的libtool到項目目錄,應該在/usr/bin目錄下,覆蓋代碼文件目錄下的libtool,再執行make (沒裝就apt-get install libtool 或者 yum install libtool 安裝一下吧) 2. 修改aclocal.m4文件,將上面的LIBTOOL='$(SHELL) $(top_builddir)/libtool'改爲LIBTOOL='$(SHELL) /usr/bin/libtool'後從新執行./configure 3. 將源碼目錄下libtool腳本中全部的$ECHO替換成$echo. 或者將腳本文件ltmain.sh裏的$echo替換成$ECHO,都同樣,從新執行./configure 另外一種解決方案 export echo=echo 回車後 make 正常