今天研究了一下window下安裝sphinx,終于是把sphinx服務(wù)安裝了(只限CMD端),至于如何在用PHP查詢(xún)還在研究中,就說(shuō)說(shuō)一下如何在window下安裝sphinx服務(wù)端大概流程:
1.首先查看服務(wù)器mysql 的版本,找對(duì)應(yīng)的數(shù)據(jù)庫(kù)版本對(duì)應(yīng)SphinxSE下載,下載兩個(gè)文件:mysql-5.0.45-sphinxse-0.9.8-win32.zip和sphinx-0.9.8.1-win32.zip,下載地址:http://sphinxsearch.com/downloads/archive/,查看服務(wù)器mysql版本可能用status命令查看:如圖
2.如果服務(wù)器處于啟狀態(tài),可以先關(guān)閉mysql服務(wù)器
3.解壓mysql-5.0.45-sphinxse-0.9.8-win32.zip,將里面bin與share目錄覆蓋掉你的mysql安裝目錄下的相應(yīng)目錄 ,解壓sphinx-0.9.8.1-win32.zip壓縮包文件到d:websphinx 因?yàn)閣amp服務(wù)器所有文件都放在web下,這里為了管理方便就統(tǒng)一放在web下。
4.下面就弄sphinx配置了,在sphinx目錄下sphinx-min.conf.in拷貝一份重命名后綴名為.conf 的文件,這里我命名為sphinx-doc.conf
復(fù)制內(nèi)容到剪貼板- # Minimal Sphinx configuration sample (clean, simple, functional)
- #
- # type----------------------------------------數(shù)據(jù)庫(kù)類(lèi)型,目前支持 mysql 與 pgsql
- # strip_html--------------------------------是否去掉html 標(biāo)簽
- # sql_host----------------------------------數(shù)據(jù)庫(kù)主機(jī)地址
- # sql_user----------------------------------數(shù)據(jù)庫(kù)用戶(hù)名
- # sql_pass----------------------------------數(shù)據(jù)庫(kù)密碼
- # sql_db-------------------------------------數(shù)據(jù)庫(kù)名稱(chēng)
- # sql_port-----------------------------------數(shù)據(jù)庫(kù)采用的端口
- # sql_query_pre--------------------------執(zhí)行sql前要設(shè)置的字符集,用utf8必須SET NAMES utf8
- # sql_query---------------------------------全文檢索要顯示的內(nèi)容,在這里盡可能不使用where或 group by,將 where 與 groupby 的內(nèi)容交給 sphinx,由 sphinx 進(jìn)行條件過(guò)濾與 groupby 效率會(huì)更高
- # 注意: select 出來(lái)的字段必須至少包括一個(gè)唯一主鍵 (ARTICLESID) 以及要全文檢索的字段,你計(jì)劃原本在 where 中要用到的字段也要 select 出來(lái)
- # 這里不用使用orderby
- # sql_attr_ 開(kāi)頭的表示一些屬性字段,你原計(jì)劃要用在 where, orderby, groupby 中的字段要在這里定義(# 為自己添加的注釋內(nèi)容)
-
- #source 數(shù)據(jù)源名:
-
- source documents
- {
- type = mysql
- sql_host = localhost
- sql_user = root
- sql_pass =
- sql_db = DB_9streets
- sql_port = 3306 # optional, default is 3306
-
- sql_query_pre = SET NAMES utf8
- sql_query =
- SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content
- FROM documents
-
- sql_attr_uint = group_id
- sql_attr_timestamp = date_added
-
- sql_query_info = SELECT * FROM documents WHERE id=$id
- }
-
-
- index documents
- {
- source = documents
-
- #path 索引記錄存放目錄,如 d:/sphinx/data/cgfinal ,實(shí)際存放時(shí)會(huì)存放在 d:/sphinx/data 目錄,然后創(chuàng)建多個(gè) cgfinal 名稱(chēng),不同擴(kuò)展名的索引文件。
- path = d:/web/sphinx/doc
- docinfo = extern
- enable_star = 1
-
- min_word_len = 3
- min_prefix_len = 0
- min_infix_len = 3
- charset_type = sbcs
-
- # 其他的配置如 min_word_len, charset_type, charset_table, ngrams_chars, ngram_len 這些則是支持中文檢索需要設(shè)置的內(nèi)容。
- # 如果檢索的不是中文,則 charset_table, ngrams_chars, min_word_len 就要設(shè)置不同的內(nèi)容,具體官方網(wǎng)站的論壇中有很多,大家可以去搜索看看。
- }
-
- # mem_limit 索引使用內(nèi)存最大限制,根據(jù)機(jī)器情況而定,默認(rèn)是32M,太小的會(huì)影響索引的性能。
- indexer
- {
- mem_limit = 32M
- }
-
- # 搜索的守護(hù)進(jìn)程配置
- # 在進(jìn)行全文檢索過(guò)程中,searchd要先開(kāi)啟,mysql在全文檢索時(shí)才能連接到sphinx,由sphinx進(jìn)行全文檢索,再將結(jié)果返回給mysql
- # address 偵聽(tīng)請(qǐng)求的地址,不設(shè)置則偵聽(tīng)所有地址
- # port 偵聽(tīng)端口
- searchd
- {
- port = 3312
- log =d:/web/sphinx/logs/searched_doc.log
- query_log = d:/web/sphinx/logs/query_doc.log
- read_timeout = 5
- max_children = 30
- pid_file = d:/web/sphinx/logs/searched-doc.pid
- max_matches = 1000
- seamless_rotate = 0
- preopen_indexes = 0
- unlink_old = 1
- }
注意哦:配置要根據(jù)具體的服務(wù)器環(huán)境去設(shè)置,然后再copy一份到sphinxin目錄下,命名和剛才重命名文件一樣為sphinx-doc.conf
5.導(dǎo)入sphinx包下example.sql,自帶sql文件數(shù)據(jù)庫(kù)為test,或修改自帶sql數(shù)據(jù)庫(kù)名,也可以根據(jù)自身數(shù)據(jù)庫(kù)導(dǎo)入:
復(fù)制內(nèi)容到剪貼板- CREATE TABLE `documents` (
- `id` int(11) NOT NULL auto_increment,
- `group_id` int(11) NOT NULL,
- `group_id2` int(11) NOT NULL,
- `date_added` datetime NOT NULL,
- `title` varchar(255) NOT NULL,
- `content` text NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=5;
-
- INSERT INTO `documents` VALUES ('1', '1', '5', '2008-09-13 21:37:47', 'test one', 'this is my test document number one. also checking search within phrases.');
- INSERT INTO `documents` VALUES ('2', '1', '6', '2008-09-13 21:37:47', 'test two', 'this is my test document number two');
- INSERT INTO `documents` VALUES ('3', '2', '7', '2008-09-13 21:37:47', 'another doc', 'this is another group');
- INSERT INTO `documents` VALUES ('4', '2', '8', '2008-09-13 21:37:47', 'doc number four', 'this is to test groups');
6.在 cmd 模式下(不了解CMD下操作,可以進(jìn)入相關(guān)了解了解),在sphinx/bin目錄下:
復(fù)制內(nèi)容到剪貼板- indexer.exe --config d:/web/sphinx/bin/sphinx-doc.conf documents
7.運(yùn)行檢索守護(hù)進(jìn)程 searchd.exe(注:如要把
phinx安裝成系統(tǒng)服務(wù),在后臺(tái)運(yùn)行,可用searchd.exe --config d:/web/sphinx/bin/sphinx-doc.conf --install):
復(fù)制內(nèi)容到剪貼板- searchd.exe --config d:/web/sphinx/bin/sphinx-doc.conf
8. 查找關(guān)鍵詞search.exe this is m
復(fù)制內(nèi)容到剪貼板- search.exe -c sphinx-doc.conf this is m
運(yùn)行了出現(xiàn)警告,(暫未找到原因,先忽略),說(shuō)明我們的 Sphinx 已經(jīng)正常運(yùn)行了!
ps:PHP乍么連接起來(lái)還在研究中?找不到在window下對(duì)應(yīng)的sphinx模塊,有好方案的同學(xué)們,歡迎交流
---------------------------------------------window下安裝sphinx實(shí)例華麗分割線-----------------------------------------------------
下面是PHP調(diào)用方法實(shí)例:
1.把sphinx/api目錄拷貝到服務(wù)器某個(gè)項(xiàng)目中,在項(xiàng)目api文件夾里面建一個(gè)index.php的文件 ,寫(xiě)入以下代碼:
復(fù)制內(nèi)容到剪貼板
- require ( "sphinxapi.php" );
- $host = "dwz.com";
- $port = 3312;
- $sc = new SphinxClient(); // 實(shí)例化Api
- $sc->setServer('dwz.com', 3312); // 設(shè)置服務(wù)端,第一個(gè)參數(shù)sphinx服務(wù)器地址,第二個(gè)sphinx監(jiān)聽(tīng)端口
- $res = $sc->query('test', 'documents'); // 執(zhí)行查詢(xún),第一個(gè)參數(shù)查詢(xún)的關(guān)鍵字,第二個(gè)查詢(xún)的索引名
- $ids = join(',',array_keys($res['matches']));
- print_r($ids); // 獲取主鍵
- ?>
運(yùn)行結(jié)果下:
這里說(shuō)明PHP調(diào)用sphinx成功了,剩下的就是php調(diào)用sphinx具體用法的深入研究了
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。