配置Sphinx(重要)
步骤1:创建youhua3数据库
步骤2:将etc/csft_mysql.conf复制并更名为sphinx.conf
步骤3:复制下面代码替换shpinx.conf中的内容(红色-可能需要修改,绿色-存在对应关系)
#数据源:数据来源定义(数据库信息、数据源SQL语句)
source music
{
#下面是sql数据库特有的端口,用户名,密码,数据库名等。
type = mysql
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = youhua3
sql_port = 3306
sql_query_pre = SET NAMES utf8
#sql_query属性:取出要创建索引的数据
#要求1:SELECT的第一个字段必须是主键、
#要求2:第一个字段的名字(别名)必须是id
#要求3:其他的字段就是要创建索引的字段
#需 求:为歌曲表中的title和author和content字段创建索引
sql_query = SELECT id, title, author, content FROM music
}
#索引的定义(索引文件存放的位置,索引文件的名字)
#每个index对应一个数据源,用来定义这个数据源生成的索引文件的信息
index music
{
#该索引对应哪个数据源
source = music
#索引文件存放的目录和名字(存到E:/sphinx/var/data/目录下,索引文件的名字是music)
path = F:/www/sphinx/var/data/music
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#词库文件所在的目录
charset_dictpath = F:/www/sphinx/etc/
#字符集编码类型,可以为:(sbcs,utf-8,zh_cn.utf-8,zh_ch.gbk,zh_ch.big5)
charset_type = zh_cn.utf-8
}
#全局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
# 进程id文件
pid_file = F:/www/sphinx/var/log/searchd_mysql.pid
# 系统日志存放的位置
log = F:/www/sphinx/var/log/searchd_mysql.log
# 查询日志存放的位置
query_log = F:/www/sphinx/var/log/query_mysql.log
}
index music 创建music索引(和source一一对应,表示该索引通过哪些数据创建)
source music1 创建music数据源
创建索引
创建指定索引语法:indexer.exe -c 配置文件 索引名
创建全部索引语法:indexer.exe -c 配置文件 --all
使用PHP API操作 Sphinx
创建Sphinx服务
创建服务:bin\searchd.exe -c 配置文件 --install
删除服务:sc delete 服务名
启动服务:net start 服务名
关闭服务:net stop 服务名
2、初体验(PHP操作Sphinx)
复制sphinx\api目录中的接口文件sphinxapi.php放到站点目录
在站点目录创建test.php引入该文件
SetServer('localhost', 9312);
#步骤4:
#步骤5:设置查询条数
$sp->SetLimits(0, 5000);
#步骤6:发送查询
$rs = $sp->query('冬天', 'music');
echo '';
print_r($rs);
匹配模式
语法:$sp->SetMatchMode(常量)
SPH_MATCH_ALL 匹配所有词(默认)
SPH_MATCH_ANY 匹配一个词
SPH_MATCH_PHRASE 匹配整一个词
SPH_MATCH_BOOLEAN 将查询看作一个布尔表达式
SPH_MATCH_EXTENDED 查询看做一个sphinx的表达式
将查询看作一个布尔表达式(SPH_MATCH_BOOLEAN)
说明:就是通过运算查询
举例:
$sp->query('冬天 !寒冷', 'music')
匹配冬天关键字,但是不能有寒冷
$sp->query('冬天 & 寒冷', 'music')
匹配冬天 并且有 寒冷(都要有)
$sp->query('冬天 | 寒冷', 'music')
匹配冬天或寒冷(只要有一个)
查询看做一个sphinx的表达式(SPH_MATCH_EXTENDED)
说明:查询指定字段的内容
举例:@title 内容 @content 内容 @author 内容
练习:内容(content)字段=PHP
//例子
SetServer("localhost",9312);
$sp->SetMatchMode(SPH_MATCH_ALL);
//设置查询的条数
$sp->SetLimits(0,10);
//发送查询
$rs = $sp->query('我喜欢php', 'music');
$ids=array_keys($rs['matches']);
$id=implode(',',$ids);
$pdo=new PDO("mysql:dbname=youhua3",'root','root');
$rt=$pdo->query("select * from music where id in ({$id})");
$res=$rt->fetchAll(PDO::FETCH_ASSOC);
foreach($res as $k){
echo $k['id'].'
';
echo gl("我",gl("喜欢",gl('php',$k['title']))).'
';
echo gl("我",gl("喜欢",gl('php',$k['author']))).'
';
echo gl("我",gl("喜欢",gl('php',$k['content']))).'
';
}
/*代码高亮*/
function gl($keywords,$content){
return str_replace($keywords,"{$keywords}",$content);
}