本次天津網站設計——文率科技技術貼向大家分享thinkphp調用sphinxapi的一段小代碼
首先我們把coreseek下載好,命名為coreseek,我們找到coreseek/etc中的csft_mysql.conf修改這個配置文件
#源定義
source lemai
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 123
sql_db = lemai
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, title,content,name FROM shop
#sql_query⑴列id需為整數
#title、content作為字符串/文本字段,被全文索引
sql_attr_uint = sid #從SQL讀取到的值必須為整數
sql_attr_timestamp = time #從SQL讀取到的值必須為整數,作為時間屬性
sql_query_info_pre = SET NAMES utf8 #命令行查詢時,設置正確的字符集
sql_query_info = SELECT * FROM shop WHERE name=$id #命令行查詢時,從數據庫讀取原始數據信息
}
#index定義
index lemai
{
source = lemai #對應的source名稱
path = var/data/mysql #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#中文分詞配置,詳情請查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
#charset_dictpath = /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 = 9312
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_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 -c etc\csft_mysql.conf (mysql,等)數據庫名 創建索引
創建完之后我們可以在var\data下看到一堆文件,此時說明創建成功
bin\searchd -c etc\csft_mysql.conf --console 啟動進程
(檢查端口9312是否有這個進程,有就OK)
命令行查詢
echo 一號店 |iconv -f gbk -t utf-8 | search -c etc\csft_mysql.conf --stdin | iconv -f utf-8 -t gbk 中文索引查詢
然后就可以在控制器中進行PHP連接sphinxapi進行測試了
Vendor('Coreseek.api.sphinxapi');
//加載第三方擴展包的文件 文件名不包含class
$db = new PDO('mysql:host=localhost;port=3306;dbname=lemai', 'root', '123', array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
//實例化PDO
$spx = new SphinxClient();
//實例化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);
本文摘自天津網站設計——文率科技技術總監韓文博的新浪博客。我們的官網上還有《ThinkPHP的關聯Model要注意的幾點》如果你需要了解這方面的知識可以點擊我們的官網http://codepolly.com