Sphinx是一個基于SQL的全文檢索引擎,可以結(jié)合MySQL,PostgreSQL做全文搜索,它可以提供比數(shù)據(jù)庫本身更專業(yè)的搜索功能,使得應(yīng)用程序更容易實現(xiàn)專業(yè)化的全文檢索。Sphinx特別為一些腳本語言設(shè)計搜索API接口,如PHP,Python,Perl,Ruby等,同時為MySQL也設(shè)計了一個存儲引擎插件
phpcms sphinx全文索引教程
英文介紹:http://www.sphinxsearch.com/docs/manual-0.9.9.html
一、首先需要在服務(wù)器上安裝sphinx
在Windows上安裝sphinx
1.下載支持mysql的包 http://www.sphinxsearch.com/downloads/sphinx-0.9.9-win32.zip
2.解壓縮 sphinx-0.9.9-win32.zip 到 D:\sphinx
3.安裝sphinx服務(wù),在命令行執(zhí)行命令
D:\sphinx\searchd –install –config d:\sphinx\sphinx.conf –servicename SphinxSearch
英文參照:http://www.sphinxsearch.com/docs … #installing-windows
1.下載源碼包 http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
- $ tar xzvf sphinx-0.9.8.tar.gz
- $ cd sphinx
- $ ./configure –prefix=/usr/local/sphinx –with-mysql=/usr/local/mysql
- $ make
- $ make install
常見問題1
- /usr/local/sphinx-0.9.9/src/sphinx.cpp:20060: undefined reference to libiconv_open'
- /usr/local/sphinx-0.9.9/src/sphinx.cpp:20078: undefined reference to libiconv‘ //開源軟件:Vevb.com
- /usr/local/sphinx-0.9.9/src/sphinx.cpp:20084: undefined reference to libiconv_close'
- collect2: ld returned 1 exit status
- make[2]: *** [indexer] Error 1
- make[2]: Leaving directory /home/jling/sphinx-0.9.9/src’
- make[1]: *** [all] Error 2
- make[1]: Leaving directory `/home/jling/sphinx-0.9.9/src‘
- make: *** [all-recursive] Error 1
解決辦法:打開configure文件,找到“#define USE_LIBICONV 1”,將注釋去掉,并將1改成0.
常見問題2
error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
解決辦法:
64位系統(tǒng)ln -s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib64/libmysqlclient.so.16
32位系統(tǒng)ln -s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so.16
sphinx.conf樣例
- source main
- {
- type = mysql #數(shù)據(jù)庫類型
- sql_host = 10.228.134.211 #數(shù)據(jù)庫ip
- sql_user = admin #數(shù)據(jù)庫用戶名
- sql_pass = admin #數(shù)據(jù)庫密碼
- sql_db = phpcms_v9 #數(shù)據(jù)庫名
- sql_port = 3306 # 數(shù)據(jù)庫端口
- sql_query_pre = SET NAMES utf8
- sql_query_pre = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
- sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \
- WHERE searchid>=$start AND searchid<=$end
- sql_query_range = SELECT 1,max_doc_id FROM v9_sphinx_counter WHERE counter_id=1
- sql_range_step = 5000
- #字符串屬性設(shè)置、需要過濾、排序的時候用到
- sql_attr_uint = typeid
- sql_attr_uint = siteid
- sql_attr_uint = id
- sql_attr_timestamp = adddate
- sql_query_info = SELECT * FROM v9_search WHERE searchid=$id
- }
- source delta
- {
- type = mysql #數(shù)據(jù)庫類型
- sql_host = 10.228.134.211 #數(shù)據(jù)庫ip
- sql_user = admin #數(shù)據(jù)庫用戶名
- sql_pass = admin #數(shù)據(jù)庫密碼
- sql_db = phpcms_v9 #數(shù)據(jù)庫名
- sql_port = 3306 # 數(shù)據(jù)庫端口
- sql_query_pre = SET NAMES utf8
- sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \
- WHERE searchid >( SELECT max_doc_id FROM v9_sphinx_counter WHERE counter_id=1 )
- sql_query_post = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
- #字符串屬性設(shè)置、需要過濾、排序的時候用到
- sql_attr_uint = typeid
- sql_attr_uint = siteid
- sql_attr_uint = id
- sql_attr_timestamp = adddate
- sql_query_info = SELECT * FROM v9_search WHERE searchid=$id
- }
- #主索引
- index main
- {
- source = main
- # 放索引的目錄
- path = D:\sphinx\data\main
- # 編碼
- charset_type = utf-8
- # 指定utf-8的編碼表
- charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
- # 簡單分詞,只支持0和1,如果要搜索中文,請指定為1
- ngram_len = 1
- # 需要分詞的字符,如果要搜索中文,去掉前面的注釋
- ngram_chars = U+3000..U+2FA1F
- }
- #增量索引
- index delta
- {
- source = delta
- path = D:\sphinx\data\delta
- # 編碼
- charset_type = utf-8
- # 指定utf-8的編碼表
- charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
- # 簡單分詞,只支持0和1,如果要搜索中文,請指定為1
- ngram_len = 1
- # 需要分詞的字符,如果要搜索中文,去掉前面的注釋
- ngram_chars = U+3000..U+2FA1F
- }
- indexer
- {
- mem_limit = 128M
- }
- searchd
- {
- port = 9312
- log = D:\sphinx\data\phpcms\searchd.log
- query_log = D:\sphinx\data\phpcms\query.log
- read_timeout = 5
- max_children = 30
- pid_file = D:\sphinx\data\phpcms\searchd.pid
- max_matches = 2000
- seamless_rotate = 0
- preopen_indexes = 0
- unlink_old = 1
- }
附件:設(shè)置計劃任務(wù)更新索引
1.windows下
需要設(shè)置計劃任務(wù)
- #凌晨4點合并索引,執(zhí)行merge.bat
- #其余時間每分鐘更新索引,執(zhí)行delta.bat
- merge.bat
- @ECHO off
- D:\sphinx\bin\indexer.exe –config D:\sphinx\sphinx.conf –merge main delta –rotate
- echo indexing, window will close when complete
- delta.bat
- @ECHO off
- D:\sphinx\bin\indexer.exe –config D:\sphinx\sphinx.conf delta –rotate
- echo indexing, window will close when complete
- 2.linux下編輯定時任務(wù) crontab -e
- #凌晨4點合并索引,其余時間每分鐘更新索引
- * 0-3 * * * /usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf delta –rotate
- * 6-23 * * * /usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf delta –rotate
- 0 4 * * * /usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf –merge main delta –rotate
各種路徑、權(quán)限需要應(yīng)用所在服務(wù)器一致,如:
sphinx.conf 中需要配置
sql_host 數(shù)據(jù)庫主機(jī)地址
sql_user 數(shù)據(jù)庫用戶名
sql_pass 數(shù)據(jù)庫密碼
sql_db 數(shù)據(jù)庫名
sql_port 數(shù)據(jù)庫端口
phpcms表前綴樣例中為phpcms_
索引路徑 D:\sphinx\data\delta
新聞熱點
疑難解答
圖片精選