第一步首先要开启sphinx服务器
searchd -c 配置文件 索引名称
服务器端默认监听9321端口。常用命令:
-c:指定配置文件路径
--stop:停止当前服务
--status:查看当前状态
--install:安装为windows服务
--delete:删除windows服务
--port port:监听的端口
--index indexName:只查询某个索引,默认查询所有索引
把sphinx安装成系统服务
开始进入正题
使用PHP先把查询的关键词发给sphinx服务器进行查询,sphinx会返回查询到的记录在mysql中记录的ID
a.创建一个PHP文件
b.复制PHP的API文件到网站目录下:
操作sphinx的php文件 如果查询的内容有中文,那么应该讲文件编码设置为UTF-8编码
如果没有设置,可能结果中不会出现matches元素 total则会统计出匹配的结果为空(0)
PHP操作sphinx代码:
header("Content-type:text/html;charset=utf-8");
require('sphinxapi.php');
$sp = new SphinxClient();
//设置服务器
$sp -> setServer('localhost',9312);
$sp -> setArrayResult(true);
//查询出的数据一共0-99 一共100条数据
$sp -> setLimits(0,100);
//查询shpinx
//参数1:查询的单词
//参数2: 查询的索引文件名字 如果不填写,说明是从所有的索引中查询
$res = $sp->query('唐吉可德','mymovie');
$id=array();
foreach(($res['matches']) as $key =>$v){
$id[]=$v['id'];
}
$id_string=implode(',',$id);
$link=mysql_connect('localhost','root',123456);
if(!$link){
die("失败!");
}
mysql_select_db('dedecms831');
mysql_set_charset('utf8');
//echo $id_string;
//die();
$sql = "SELECT a.id,b.juqing,a.title FROM `dede_archives` a LEFT JOIN `dede_addon7` b ON a.id=b.aid where a.id IN(".$id_string.")";
$data = array();
$res=mysql_query($sql);
while($row=mysql_fetch_assoc($res)){
$data[]=$row;
}
echo "
";
var_dump($data);
常用API有下面几种:
buildExcerpts:创建文档摘要
close:关闭连接
query:执行查询
getLastError:返回上一条错误信息
open:建立到服务器端的持久连接
setArrayResult:设置返回结果格式
setLimits:设置返回结果数量与偏移
setMatchModel:设置查询模式
updateAttributes:更新文档属性
setGroupBy 设置分组属性
setFileter 设置过滤器
更多的API可以查看http://www.php.net/manual/zh/book.sphinx.php
Sphinx的匹配模式
SPH_MATCH_ALL 匹配所有查询词(默认)
SPH_MATCH_ANY 匹配查询词中的任意一个
SPH_MATCH_PHRASE 将整个查询词看做一个词组,要完全匹配
SPH_MATCH_BOOLEAN 将查询看做一个布尔表达式
SPH_MATCH_EXTENDED 查询看做一个sphinx的表达式
PHP中通过setMatchMode函数来设置,如:
$sc = new SphinxClient();
$sc->setMatchMode(SPH_MATCH_ANY);