php操作Sphinx
2018-09-18 本文已影响68人
老衲灬
使用PHP API操作 Sphinx
1、基础操作
步骤1:复制sphinx\api目录中的接口文件sphinxapi.php放到站点目录
步骤2:在站点目录创建test.php引入该文件
#步骤1:引入sphinx接口文件
require './sphinxapi.php';
#步骤2:实例化对象
$sp = new SphinxClient;
#步骤3:设置服务
$sp->SetServer('localhost', 9312);
#步骤4:设置匹配模式
#$sp->SetMatchMode(SPH_MATCH_ALL); //默认就是SPH_MATCH_ALL
#步骤5:设置查询条数
$sp->SetLimits(0, 5000);
#步骤6:发送查询
$rs = $sp->query('冬天', 'music');
echo '<pre>';
print_r($rs);
2、匹配模式
模式设置语法:$sp->SetMatchMode(常量)
常量参数:
-> SPH_MATCH_ALL
:匹配所有词(默认)
$sp->query('冬天的秘密', 'music'):“冬天”“的”“秘密”三个分词都必须存在,但是位置不限
-> SPH_MATCH_ANY
:匹配一个词
$sp->query('冬天的秘密', 'music'):“冬天”“的”“秘密”只要有一个存在,就匹配
注意:此模式结果不一定准确
-> SPH_MATCH_PHRASE
:匹配整个词
$sp->query('冬天的秘密', 'music'):“冬天的秘密”必须存在,位置必须一致
-> SPH_MATCH_BOOLEAN
:将查询看作一个布尔表达式
$sp->query('冬天 ! 秘密', 'music'):匹配’冬天’关键字,但是不能有’秘密’
$sp->query('冬天 & 秘密', 'music'):匹配’冬天’并且有’秘密’
$sp->query('冬天 | 秘密', 'music'):匹配’冬天’或’秘密’
-> SPH_MATCH_EXTENDED
:查询看做一个sphinx的表达式
$rs = $sp->query('@content 秘密 @author 传雄', 'music'):查找content字段=‘秘密’而且author字段=‘传雄’
3、获取查询结果
#步骤1:引入sphinx接口文件
require './sphinxapi.php';
#步骤2:实例化对象
$sp = new SphinxClient;
#步骤3:设置服务
$sp->SetServer('localhost', 9312);
#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_ALL);
#步骤5:设置查询条数
$sp->SetLimits(0, 5000);
#步骤6:发送查询
$rs = $sp->query('冬天', 'music');
//如果查询到结果,则获取所有数据库数据ID
if (!isset($rs['matches'])) {
echo "未查询到相关数据";
die;
}
$ids = array_keys($rs['matches']);
$ids = implode(',', $ids);
//获取数据
$pdo = new PDO('mysql:dbname=sphinx', 'root', '666666');
$pdoStatementObj = $pdo->query("select * from music where id in ($ids)");
$musics = $pdoStatementObj->fetchAll(PDO::FETCH_ASSOC);
//循环显示数据
foreach ($musics as $music) {
echo $music['id'] . '__' . $music['author'] . '<hr />';
}