1. 程式人生 > mysql教程 > Sphinx+PHP+Mysql高效搜尋web端搭建(windows)

Sphinx+PHP+Mysql高效搜尋web端搭建(windows)

  • 一安裝配置wampserver
  • 二下載coreseek
    • 1安裝coreseek
    • 2測試coreseek
  • 二配置及其啟動

 最近幾天給朋友搭建了個社工庫,框架是Sphinx+PHP+Mysql。但是原始碼附帶文件寫的很爛,而且是linux下的, 所以找了些相關資料配置了下,寫出來分享給大家。大致原始碼效果圖如下(可自行搜尋原始碼下載):

Sphinx+PHP+Mysql高效搜尋web端搭建(windows)_MySQL
程式碼資源截圖如下:
Sphinx+PHP+Mysql高效搜尋web端搭建(windows)_MySQL

這裡只提供配置,不提供資料,因為我也沒有,相當於技術研究。
 簡單介紹下吧,Sphinx是一個基於SQL的全文檢索引擎,在資料庫資料量比較大的時候可以派上用場,檢索效率高,具體概念百度百科上也有。而coreseek是基於sphinx的一個框架,並且支援中文分詞庫。也就是說裝coreeek就夠了,官網下載連線如下:Sphinx+PHP+Mysql高效搜尋web端搭建(windows)_MySQL
傳送門

注意:本文可能需要一定從事程式設計行業的基礎知識,純小白需要自己查清楚這些概念。

環境:windows7。

一、安裝配置wampserver:

 wampserver集成了appache,php,mysql,能夠比較便捷的搭建web端,概念就不多說配置方法自行百度,要能跑起web來,有機會再寫吧。
比較懶,直接丟個連線(隨便找的連線,如果需要自己找更好):
傳送門

 配置好之後,把程式碼放到你配置的wamserver的web目錄下(忽略txt資料夾,style.css,test.php這幾個是我自己改的):
Sphinx+PHP+Mysql高效搜尋web端搭建(windows)_MySQL

 安裝navicat(連線mysql的工具),自行從網上去查詢下載破解版,安裝完成後要能連上,連上之後,
執行以下命令,建立mysql使用者和資料庫:

-- 建立資料庫CREATE DATABASE `Worker`;-- 建立使用者和角色-- CREATE USER 'ACCOUNT_ACC'@'localhost' IDENTIFIED BY '7ujm*IK<';-- GRANT SELECT, INSERT, UPDATE ON `KC_ACCOUNT`.* TO 'ACCOUNT_ACC'@'localhost';-- 方式二GRANT USAGE ON *.* TO 'ygg'@'localhost' IDENTIFIED BY '654321';GRANT SELECT, INSERT, UPDATE , DELETE, CREATE ON `Worker`.* TO 'ygg'@'localhost'; 二、下載coreseek: 1、安裝coreseek:

下載好coreseek解壓到你想要的目錄下,就算安裝好了(忽略start.cm
d,那是我寫的啟動指令碼):
Sphinx+PHP+Mysql高效搜尋web端搭建(windows)_MySQL
圖裡已經說得很清楚了,那我就不在多說:

2、測試coreseek:

測試方法其實不是很想多說,但有助於配置,引用下別人的
傳送門:
第1步:在mysql匯入測試資料:
隨便建立個使用者表,插幾條資料

use worker;DROP TABLE IF EXISTS `users`;CREATE TABLE `users` ( `id` int(9) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) default NULL, `password` varchar(255) default NULL, `email` varchar(255) default NULL, KEY `username` (`username`), KEY `email` (`email`) PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;-- ------------------------------ Records of users-- ----------------------------INSERT INTO `users` VALUES (1,'acn', '123456', '[email protected]');

第2步:建立配置檔案:
在之前的安裝的coreseek-4.1-win32/etc目錄下建立一個test.conf,將其內容改為下面這些:

source mysql{type = mysql sql_host = localhost #資料庫地址sql_user = ygg #資料庫使用者名稱sql_pass = 654321 #資料庫密碼sql_db = worker #資料庫名sql_port = 3306 #埠號sql_query_pre = SET NAMES utf8 #設定字符集sql_query = SELECT id,username,email FROM members #sql語句sql_attr_timestamp = addtime}index mysql{source = mysqlpath = E:/coreseek-4.1-win32/var/data/test #索引目錄charset_dictpath = E:/coreseek-4.1-win32/etc/ charset_type = zh_cn.utf-8 #編碼}searchd{listen = 9312 #監聽埠max_matches = 1000 #最大查詢數pid_file = E:/coreseek-4.1-win32/var/log/searchd_mysql.pid log = E:/coreseek-4.1-win32/var/log/searchd_mysql.logquery_log = E:/coreseek-4.1-win32/var/log/query_mysql.log}

大多數引數挺簡單,就不多說,理解下。
第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指令碼,以後啟動就通過它來
如圖:
Sphinx+PHP+Mysql高效搜尋web端搭建(windows)_MySQL
內容如下:

@SET path=.;bin;%path%@indexer -c etc/mysqlcsft.conf [email protected] -c etc/mysqlcsft.conf

 修改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:
Sphinx+PHP+Mysql高效搜尋web端搭建(windows)_MySQL
這樣就完成了。慢慢匯入資料吧。