ThinkPHP中如何使用coreseek(sphinx)?

Tags: 網頁, 實際,

在網上找了很久,thinkphp是沒有sphinx擴充套件的,那麼我們可以自己擴充套件一個用,今天搞了好久,只能總結一點thinkphp呼叫sphinxapi的一段小程式碼

首先我們把coreseek下載好,命名為coreseek,我們找到coreseek/etc中的csft_mysql.conf修改這個配置檔案

#源定義source lemai{type = mysql

sql_host = localhostsql_user = rootsql_pass = 123sql_db = lemaisql_port = 3306sql_query_pre = SET NAMES utf8

sql_query = SELECT id, title,content,name FROMshop#sql_query第一列id需為整數#title、content作為字串/文字欄位,被全文索引sql_attr_uint =sid #從SQL讀取到的值必須為整數sql_attr_timestamp = time #從SQL讀取到的值必須為整數,作為時間屬性

sql_query_info_pre = SET NAMESutf8 #命令列查詢時,設定正確的字符集sql_query_info = SELECT * FROM shop WHERE name=$id #命令列查詢時,從資料庫讀取原始資料資訊}

#index定義index lemai{source =lemai #對應的source名稱path = var/data/mysql #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...docinfo = externmlock = 0morphology = nonemin_word_len = 1html_strip = 0

#中文分詞配置,詳情請檢視: = /usr/local/mmseg3/etc/ #BSD、Linux環境下設定,/符號結尾charset_dictpath =C:/AppServ/www/thinkphp/ThinkPHP/Extend/Vendor/Coreseek/etc/ #Windows環境下設定,/符號結尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/...charset_type = zh_cn.utf-8#charset_table =ngram_len = 0}

#全域性index定義indexer{mem_limit = 128M}

#searchd服務定義searchd{listen = 9312read_timeout = 5max_children = 30max_matches = 1000seamless_rotate = 0preopen_indexes = 0unlink_old = 1pid_file = var/log/searchd_mysql.pid #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...log = var/log/searchd_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...query_log = var/log/query_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...}

然後把coreseek拷貝一份到thinkphp的核心檔案Extend/Vendor下.

開啟cmd cd到coreseek

bin\indexer -cetc\csft_mysql.conf (mysql,等)資料庫名 建立索引

建立完之後我們可以在var\data下看到一堆檔案,此時說明建立成功

bin\searchd -cetc\csft_mysql.conf --console 啟動程序

(檢查埠9312是否有這個程序,有就OK)

命令列查詢

echo一號店 iconv -f gbk -tutf-8 search -c etc\csft_mysql.conf --stdin iconv -f utf-8 -tgbk 中文索引查詢

然後就可以在控制器中進行PHP連線sphinxapi進行測試了

Vendor('Coreseek.api.sphinxapi');//載入第三方擴充套件包的檔案檔名不包含class

$db = newPDO('mysql:host=localhost;port=3306;dbname=lemai', 'root', '123', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));//例項化PDO

$spx = newSphinxClient();//例項化SphinxClient

$spx ->SetServer('127.0.0.1',9312);$spx->SetConnectTimeout ( 3 );$spx->SetArrayResult ( true );$spx -> SetMatchMode(SPH_MATCH_ANY);$result = $spx -> query('1','*');$ids = join(",",array_keys($result['matches']));$sql = "SELECT * FROM shop where id in ({$ids})";$stmt = $db->query($sql);$r = $stmt->FETCHALL(PDO::FETCH_ASSOC);echo "

";var_dump($r);

文章來自天津文率科技技術總監韓文博的部落格。

相關問題答案