sphinx(七)sphinx匹配模式
Sphinx匹配模式
语法: $sp -> SetMatchMode(常量)
SPH_MATCH_ALL 匹配所有词(默认)
SPH_MATCH_ANY 匹配一个词
SPH_MATCH_PHRASE 匹配整一个词
SPH_MATCH_BOOLEAN 将查询看作一个布尔表达式
SPH_MATCH_EXTENDED 查询看做一个sphinx的表达式
复制代码
举例: 我喜欢PHP
分词: 我 喜欢 PHP
准备工作: 先停止服务-> 创建索引->启动服务
1:匹配所有词(SPH_MATCH_ALL)
说明:我 喜欢 PHP 字段都要存在, 位置不限
<?php
#步骤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('我喜欢PHP', 'music');
echo '<pre>';
print_r($rs); #
复制代码
2:匹配一个词(SPH_MATCH_ANY)
说明: 我 喜欢 PHP 只要有一个存在,就匹配
#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_ANY);
复制代码
3:匹配整个词(SPH_MATCH_PHRASE)
说明: 我 喜欢 PHP 都必须存在 位置必须一致
#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_PHRASE);
复制代码
4:将查询看作一个布尔表达式(SPH_MATCH_BOOLEAN)
#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_BOOLEAN);
复制代码
5:查询看做一个sphinx的表达式(SPH_MATCH_EXTENDED)
说明: 查询指定字段的内容 @字段 内容
举例: @title 内容 @content 内容 @author 内容
#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_EXTENDED);
#步骤5:设置查询条数
$sp->SetLimits(0, 5000);
#步骤6:发送查询
$rs = $sp->query('@content PHP @author 校长'); #内容=PHP并作者=校长
echo '<pre>';
print_r($rs); #
复制代码
这里需要注意一下:
官方的sphinxapi.php中设置查询模式的代码如下所示:
/// set matching mode
function SetMatchMode ( $mode )
{
// trigger_error 应该注释,否则访问即报错
trigger_error ( 'DEPRECATED: Do not call this method or, even better, use SphinxQL instead of an API', E_USER_DEPRECATED );
assert ( $mode==SPH_MATCH_ALL
|| $mode==SPH_MATCH_ANY
|| $mode==SPH_MATCH_PHRASE
|| $mode==SPH_MATCH_BOOLEAN
|| $mode==SPH_MATCH_EXTENDED
|| $mode==SPH_MATCH_FULLSCAN
|| $mode==SPH_MATCH_EXTENDED2 );
$this->_mode = $mode;
}
复制代码
我们需要将trigger_error这行代码注释。否则访问就报错。
================== 我是分隔符 ===================================
这里大概解释一下相关操作符的使用方法:
操作符OR:hello | world,区配含有hello或world
操作符NOT:hello -world或hello !world,区配包含hello,且不包含world
字段搜索操作符:@title hello @body world,匹配title中有hello及body中有world
字段限位修饰符:@title[5] hello ,匹配title字段前5个词中包含有hello
多字段搜索符:@(title,body) hello,匹配title或body包含有hello
全字段搜索符:@* hello,区配任何一列包含有hello
阀值匹配符:"this is test document number"/3,匹配至少包含有3个词
短语(phrase)搜索符:“hello world”
临近(proximity)搜索符:“hello world”~10,匹配hello与world之间小于10个词
严格有序搜索符:aaa<<bbb<<ccc,匹配aaa,bbb,ccc按顺序出现
字段开始和字段结束修饰符:^hello world$,匹配以hello开始,world为结尾
相关文章