sphinx是一個高效的搜索引擎,分詞搜索的速度比較快,索引創建存儲在硬盤文件,不會干擾數據庫,有本身內置的一套數據庫。php
若是沒有安裝aptitude ,須要先安裝 aptitude 由於由於用apt get install 安裝下面命令會出現問題.
sudo apt-get install aptitude
sudo aptitude install sphinx3 sphinx3-doc sphinxsearch sphinx-common -y
html
修改配置文件以下mysql
#配置源 source sphinx_t0 #數據庫名_數據表名,每配置一個數據表,都須要寫上一個配置源 { type = mysql #數據庫類型 sql_host = localhost sql_user = root sql_pass = 123123 sql_db = sphinx #指定數據庫 sql_port = 3306 # optional, default is 3306 sql_sock = /tmp/mysql.sock #mysql接口 #從數據庫之中讀取數據的SQL語句設置 #在這裏儘量不使用where或groupby, #將where與groupby的內容交給sphinx,由sphinx進行條件過濾與groupby效率會更高 #注意:select的字段必須包括一個惟一主鍵以及要全文檢索的字段(能夠有多個)、輸出的字段。 #where中要用到的字段也要select出來 #例: #在配置sql語句,能夠先寫出一句預計要執行的sql語句,而後根據sphinx規定設置 #select * from t0 where description like '%廣州%' or name like '%s%' #=> select id,description,name,age from t0 sql_query = \ SELECT id, name, age, description,group_id,date_added \ FROM t0 sql_attr_uint = age #使用sql_attr設置的字段(搜索條件),只能做爲屬性,使用SphinxClient::SetFilter()進行過濾; #未被設置的字段,自動做爲全文檢索的字段,使用SphinxClient::Query("搜索字符串")進行全文搜索 #sql_query第一列id需爲整數,且被系統使用,無需再設置sql_attr_uint sql_attr_uint = group_id sql_attr_timestamp = date_added #定義不一樣類型的字段要用不一樣的屬性名,好比上面的sql_attr_timestamp就是時間戳類型 #sql_query_info = SELECT * FROM documents WHERE id=$id #命令行查詢時,從數據庫讀取原始數據信息 #在執行sql_query前執行的sql命令, 能夠有多條 sql_query_pre = SET NAMES utf8 #執行sql字符編碼 } #索引,每一源須要一個索引 index sphinx_t0 #索引名字通常與配置源一致 { source = sphinx_t0 #source 關聯源 path = /usr/local/coreseek/var/data/sphinx_t0 #索引文件存放路徑,每一個索引文件一個 docinfo = extern charset_dictpath = /usr/local/mmseg/etc/ #指明分詞法讀取詞典文件的位置,當啓用分詞法時,爲必填項。在使用LibMMSeg做爲分詞 庫時,須要確保詞典文件uni.lib在指定的目錄下 charset_type = zh_cn.utf-8 #字符編碼 } #索引,控制全部索引 indexer { mem_limit = 512M #內存 } #sphinx守護進程配置 searchd { port = 9312 #端口 log = /usr/local/coreseek/var/log/searchd.log query_log = /usr/local/coreseek/var/log/query.log read_timeout = 5 #超時 max_children = 30 #最大鏈接數 pid_file = /usr/local/csft/var/log/searchd.pid #pid文件路徑 max_matches = 1000 #max_matches最大匹配數,也就是查找的數據再多也只返回這裏設置的1000條 seamless_rotate = 1 preopen_indexes = 0 unlink_old = 1 }
sudo indexer -c /etc/sphinxsearch/sphinx.conf test1
sql
test1爲上述配置文件的index名字數據庫
sudo search -c /etc/sphinxsearch/sphinx.conf google
ubuntu
apt-get install aptitude
sudo aptitude install libsphinxclient-dev libsphinxclient-0.0.1 -y
vim
安裝 pecl
sudo apt-get install php-pear php5-dev
在安裝sphinx
sudo pecl install sphinx
服務器
個人php.ini文件爲
sudo vim /etc/php5/fpm/php.ini
獲取本身的php.ini文件位置使用
php5-fpm -i|grep ini
less
添加:
extension=sphinx.so
4.重啓php5-fpm,查看php是否加載sphinx模塊
sudo /etc/init.d/php5-fpm restart
5.將search程序運行在後臺
sudo searchd -c /etc/sphinxsearch/sphinx.conf
默認監聽配置文件中的端口:9312post
<?php header('Content-Type:text/html;charset=utf-8'); //編碼爲utf-8 $list= array(); if(!empty($_POST)){ $sc = new SphinxClient(); // 實例化Api $sc->setServer('192.168.169.128', 9312); // 設置服務端,第一個參數sphinx服務器地址,第二個sphinx監聽端口 $res = $sc->query($_POST['key'], 'test1'); // 執行查詢,第一個參數查詢的關鍵字,第二個查詢的索引名稱,mysql索引名 稱(這個也是在配置文件中定義的),多個索引名稱以,分開,也能夠用*表示全部索引。 // print_r($sc); echo '<pre>'; print_r($res); echo '</pre>'; exit; } ?> <form action="" method="post"> <input type="text" name="key" /> <input type="submit" value="提交" /> </form>