php操作Sphinx

使用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 />';
}

猜你喜欢

转载自blog.csdn.net/csdn_heshangzhou/article/details/82766075