Sphinx+PHP+Mysql高效搜尋web端搭建(windows)
- 序
- 一安裝配置wampserver
- 二下載coreseek
- 1安裝coreseek
- 2測試coreseek
- 二配置及其啟動
最近幾天給朋友搭建了個社工庫,框架是Sphinx+PHP+Mysql。但是原始碼附帶文件寫的很爛,而且是linux下的, 所以找了些相關資料配置了下,寫出來分享給大家。大致原始碼效果圖如下(可自行搜尋原始碼下載):
程式碼資源截圖如下: 
這裡只提供配置,不提供資料,因為我也沒有,相當於技術研究。
簡單介紹下吧,Sphinx是一個基於SQL的全文檢索引擎,在資料庫資料量比較大的時候可以派上用場,檢索效率高,具體概念百度百科上也有。而coreseek是基於sphinx的一個框架,並且支援中文分詞庫。也就是說裝coreeek就夠了,官網下載連線如下:
傳送門
注意:本文可能需要一定從事程式設計行業的基礎知識,純小白需要自己查清楚這些概念。
環境:windows7。
一、安裝配置wampserver: wampserver集成了appache,php,mysql,能夠比較便捷的搭建web端,概念就不多說配置方法自行百度,要能跑起web來,有機會再寫吧。
比較懶,直接丟個連線(隨便找的連線,如果需要自己找更好):
傳送門
配置好之後,把程式碼放到你配置的wamserver的web目錄下(忽略txt資料夾,style.css,test.php這幾個是我自己改的): 
安裝navicat(連線mysql的工具),自行從網上去查詢下載破解版,安裝完成後要能連上,連上之後,
執行以下命令,建立mysql使用者和資料庫:
下載好coreseek解壓到你想要的目錄下,就算安裝好了(忽略start.cm
d,那是我寫的啟動指令碼):
圖裡已經說得很清楚了,那我就不在多說:
測試方法其實不是很想多說,但有助於配置,引用下別人的
傳送門:
第1步:在mysql匯入測試資料:
隨便建立個使用者表,插幾條資料
第2步:建立配置檔案:
在之前的安裝的coreseek-4.1-win32/etc目錄下建立一個test.conf,將其內容改為下面這些:
大多數引數挺簡單,就不多說,理解下。
第3步:生成索引:
開啟cmd
輸入:
E:/coreseek-4.1-win32/bin/indexer –c E:/coreseek-4.1-win32/etc/test.conf –all 生成索引。
第4步:啟動Sphinx:
同樣命令列下 :
E:/coreseek-4.1-win32/bin/searchd –c E:/coreseek-4.1-win32/etc/test.conf
二、配置及其啟動:修改mysqlcsft.conf為如下(當然資料庫,使用者名稱這些自己看著替換)並放在E:/coreseek-4.1-win32/etc目錄下:
source spdb1{ type = mysql sql_host = 127.0.0.1 sql_user = ygg sql_pass = 654321 sql_db = worker sql_port = 3306 sql_query_pre = SET NAMES utf8 sql_query = SELECT `id`, 1 AS table_id, `username`, `email`, `password` FROM spdb1 sql_attr_uint = table_id #從SQL讀取到的值必須為整數 #sql_attr_timestamp = date_added #從SQL讀取到的值必須為整數,作為時間屬性 sql_query_info_pre = SET NAMES utf8 #命令列查詢時,設定正確的字符集 sql_query_info = SELECT * WHERE ID=$id #命令列查詢時,從資料庫讀取原始資料資訊}source spdb2 : spdb1{ sql_query = SELECT `id`, 2 AS table_id, `username`, `email`, `password` FROM spdb2}source spdb3 : spdb1{ sql_query = SELECT `id`, 3 AS table_id, `username`, `email`, `password` FROM spdb3}source spdb4 : spdb1{ sql_query = SELECT `id`, 4 AS table_id, `username`, `email`, `password` FROM spdb4}source spdb5 : spdb1{ sql_query = SELECT `id`, 5 AS table_id, `username`, `email`, `password` FROM spdb5}#index定義index spdb1{ source = spdb1 #對應的source名稱 path = E:/coreseek-4.1-win32/var/data/spdb1 #請修改為實際使用的絕對路徑例如:/usr/local/coreseek/var/... docinfo = extern mlock = 0 morphology = none min_word_len = 1 ondisk_dict = 1 html_strip = 0 #中文分詞配置,詳情請檢視:http://www.coreseek.cn/products-install/coreseek_mmseg/ charset_dictpath = E:/coreseek-4.1-win32/etc/ #Windows環境下設定,/符號結尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/... charset_type = zh_cn.utf-8 enable_star = 0 #不使用萬用字元,預設不啟用,可以不寫 min_infix_len=1 #使用中綴索引,並且最小索引為1,關於該項作用不知者可以查詢手冊 infix_fields= username,email #因為中綴索引會使索引量急劇膨脹,所以最好選擇你認為最主要的少量幾個欄位做中綴索引。(模糊查詢)}index spdb2 : spdb1{ source = spdb2 path = E:/coreseek-4.1-win32/var/data/spdb2}index spdb3 : spdb1{ source = spdb3 path = E:/coreseek-4.1-win32/var/data/spdb3}index spdb4 : spdb1{ source = spdb4 path = E:/coreseek-4.1-win32/var/data/spdb4}index spdb5 : spdb1{ source = spdb5 path = E:/coreseek-4.1-win32/var/data/spdb5}#全域性index定義indexer{ mem_limit = 512M #預設32M,不要太大,否則會報錯}#searchd服務定義searchd{ listen = 9312 #查詢服務監聽埠,開啟了才會工作 read_timeout = 5 #超時 max_children = 30 #最大程序 max_matches = 1000 #返回1000條 seamless_rotate = 0 preopen_indexes = 0 unlink_old = 1 pid_file = E:/coreseek-4.1-win32/var/log/searchd.pid #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/... log = E:/coreseek-4.1-win32/var/log/searchd.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/... query_log = E:/coreseek-4.1-win32/var/log/query.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/... binlog_path = #關閉binlog日誌 compat_sphinxql_magics = 0}在E:/coreseek-4.1-win32目錄下建立start.cmd指令碼,以後啟動就通過它來
如圖:
內容如下:
修改index.php,把mysql密碼等資料修改過來:
// 返回結果設定 $cl->SetServer('127.0.0.1', 9312); $cl->SetConnectTimeout(3); $cl->SetArrayResult(true); // 設定是否全文匹配 /* if (!empty($_GET) &;&; !empty($_GET['f'])) { $cl->SetMatchMode(SPH_MATCH_ANY); } */ //$cl->SetMatchMode(SPH_MATCH_ANY);//設定為任意一項匹配 $cl->SetMatchMode(SPH_MATCH_PHRASE);//類似like if (!empty($_GET) &;&; !empty($_GET['p'])) { $p = !intval(trim($_GET['p'])) == 0 ? intval(trim($_GET['p'])) - 1 : 0; $p = $p * 20; // 我在sed.conf 設定了最大返回結果數1000。但是我在生成頁碼的時候最多生成20頁,我想能滿足大部分搜尋需求了。 // 以下語句表示從P引數偏移開始每次返回20條。 $cl->setLimits($p, 20); } else { $cl->setLimits(0, 20); } $res = $cl->Query("$Keywords", "*"); //var_dump($res); @mysql_connect("127.0.0.1", "ygg", "654321"); //資料庫賬號密碼 mysql_select_db("worker"); //資料庫庫名名 mysql_query("set names utf8"); $tables = ['spdb1' ,'spdb2','spdb3','spdb4','spdb5']; //把表名放入陣列 基本上就都修改完成了,可以直接啟動,先啟動wampserver,然後雙擊start.cmd啟動coreseek:
這樣就完成了。慢慢匯入資料吧。
