首頁  >  文章  >  後端開發  >  PHP+Sphinx+Mysql開發搜尋引擎詳細實例講解

PHP+Sphinx+Mysql開發搜尋引擎詳細實例講解

韦小宝
韦小宝原創
2018-02-10 10:39:566417瀏覽

大家聽到搜尋引擎都會覺得很難寫,一點思路都沒有,其實PHP也可以做搜尋引擎的開發,不過PHP需要結合sphinx和mysql才可以開發出我們想要的搜尋引擎,想了解PHP是如何進行搜尋引擎開發的嘛!一起來看看吧! !

#首先我們下載Sphinx這個工具,下載地址官網下載地址:www.sphinxsearch.com,找到sphinx-2.2.10-release-win64.zip,64位元的下載這個,解壓縮到我們的PHP運行目錄下面,為後面網頁查看結果方便。

sphinx介紹:

Sphinx 是SQL Phrase Index(查詢詞組索引)的縮寫,Sphinx是一個基於SQL的全文檢索引擎,它提供的API介麵包括:PHP,Python,Perl,Ruby,java等,同時為MySQL也設計了一個引擎插件SphinxSE,它是一個分散式的全文檢索系統。
優點:
  高速的建立索引可達到10M/s
  高效能的搜尋(在2-4G的文字數據上,平均每次檢索響應的時間小於0.1秒)
  可處理海量數據(目前已知可以處理100G的文本數據,在單一的CPU的系統上可處理100M的文檔)
  提供的優秀的相關度演算法,基於短語相似度和統計BM2的複合Ranking的方法
  支援分散式搜尋
#  提供文件片段產生功能
  可作為Mysql的儲存引擎提供搜尋服務
  支援布爾,片語,字詞相似度等多種檢索模式
缺點:
 必須有主鍵
# 主鍵必須為整數
 不負責資料儲存
# 配置不靈活

解壓縮之後的sphinx結構如圖所示:


##以下就是進行我們的相關配置,看到圖中的sphinx-min.conf.in,複製到我們的bin目錄下面方便一會使用改名字為sphinx.conf,

修改裡面的內容:

source src1
{
	type			= mysql

	sql_host		= localhost #主机地址
	sql_user		= root#帐号
	sql_pass		=     #密码
	sql_db			= sphinx  #数据库
	sql_port		= 3306	# 数据库端口 3306
	sql_query		= SELECT id, name, age FROM users #查询语句
	sql_attr_uint		= group_id
	sql_attr_timestamp	= date_added
	sql_query_pre = set names utf8   #数据库编码
}


index test1
{
	source			= src1
	path			= D:/myapaphe/www/sphinx/data #这个一定要配置
	charset_type = utf-8 #指定编码
	ngram_len = 1        #要找中文需指定为1.
	ngram_chars = U+3000..U+2FA1F
	
}

indexer
{
	mem_limit		= 128M
}
searchd
{
	listen			= 9312
	listen			= 9306:mysql41
	log			= D:\myapaphe\www\sphinx\log\searchd.log  #进程日志
	query_log		= D:\myapaphe\www\sphinx\log\query.log    #查询日志

	read_timeout		= 5
	max_children		= 30
	pid_file		= D:\myapaphe\www\sphinx\log\searchd.pid 
	seamless_rotate		= 1
	preopen_indexes		= 1
	unlink_old		= 1
	workers			= threads # for RT to work
	binlog_path		= D:\myapaphe\www\sphinx\data
}

上面這些一定要配置完畢,路徑一定要符合自己的路徑。

接下來產生查詢索引:


#安裝searchd服務:


接下來載入

設定檔


#啟動服務:


OK前面的設定工作,以及服務啟動已經完成現在開始程式碼:

在sphinx下面的api資料夾下方建立test3.php,運行test3.php

<?php 
require ( "sphinxapi.php" );
$s = new SphinxClient();
$s->SetServer(&#39;localhost&#39;,9312);
$result = $s->Query(&#39;高七&#39;);
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
print_r($result);


亂碼是因為cmd預設是gbk編碼,我們放到瀏覽器中去查看:


我們看到sphinx查到的不是完整的結果而是把id回給了我們,讓我們根據id再去查資料。

下面進行查詢時間比對:


我是在4萬多條資料測試的時間是0.001s,我們看下mysql的查詢需要多久:


我們看到需要0.04s,資料不多,結果沒有那麼明顯,不過0.039s的差距已經不小了。

到此sphinx的整合到此完畢,希望可以幫到大家。

相關推薦:

php 對現有搜尋引擎的呼叫詳解

php 判斷訪客是否為搜尋引擎蜘蛛的函數程式碼

以上是PHP+Sphinx+Mysql開發搜尋引擎詳細實例講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn